jxl 操作excel表格sheet不见了时 为啥要指定sheet 的位置?只要给他一个名字不就行了吗

jxl 操作Excel表格之Sheet
这篇文章主要是讲工作表相关的操作,包括得到单元格、工作表的相关属性等。
import java.io.*;
import java.util.regex.P
import jxl.*;
import jxl.read.biff.BiffE
public class TSheet {
public static void main(String args[])
File file = new File("D://JEtest/测试.xls");
Workbook book = Workbook.getWorkbook(file);
Sheet sheet = book.getSheet(0);
//返回指定行列组成的单元格,如果指定的行列组合的单元格是合并后单元组的元素,将返回一个空的单元格,除非这个单元格是单元格组的第一个。
//第一个参数是列,第二个参数是行。 索引从0开始
Cell cell = sheet.getCell(0, 0);
System.out.println("cell(0,0): " + cell.getContents());
//返回指定位置的单元格,例如:“A4”。注意,这个方法与调用
//getCell(CellReferenceHelper.getColumn(loc),CellReferenceHelper.getRow(loc))是相同的,
//其隐含的性能开销为字符串解析。因此,这种方法应该谨慎使用。
Cell cellh = sheet.getCell(CellReferenceHelper.getColumn("B1"),CellReferenceHelper.getRow("B1"));
Cell cell2 = sheet.getCell("B1");
//索引从1开始
System.out.println("cell(1,0): " + cell2.getContents());
//返回工作表的行数
int rows = sheet.getRows();
System.out.println("表1的数据行数: " + rows);
//返回工作表的列数
int columns = sheet.getColumns();
System.out.println("表1的数据列数: " + columns);
//返回指定行的单元格数组
Cell [] cellrowlist = sheet.getRow(0);
System.out.println("表1第一行单元格个数: " + cellrowlist.length);
//返回指定列的单元格数组
Cell [] cellcolumnlist = sheet.getColumn(0);
System.out.println("表1第一列单元格个数: " + cellcolumnlist.length);
//返回工作表的名称
String sheetname = sheet.getName();
System.out.println("表1的名称: " + sheetname);
//判断表是否是隐藏的
boolean judge = sheet.isHidden();
System.out.println("表1是否被隐藏: " + judge);
//判断表是否受保护
boolean judeg2 = sheet.isProtected();
System.out.println("表1是否受保护: " + judeg2);
//得到内容与传进来字符串匹配的单元格。如果没有发现匹配,将返回null.
//搜索执行是从最低行开始一行一行执行的,因此,行号越低,算法执行越高效。
//返回第一个匹配的单元格。
Cell cell3 = sheet.findCell("789.123");
System.out.println("表1内容为test单元格的行数: " + cell3.getRow());
System.out.println("表1内容为test的单元格内容: " + cell3.getContents());
//得到内容与传进来字符串匹配的单元格。如果没有发现匹配,将返回null.
//搜索执行是从最低行开始一行一行执行的,因此,行号越低,算法执行越高效。
//Cell findCell(java.lang.String contents,int firstCol,int firstRow,int lastCol,int lastRow,boolean reverse)
//contents是匹配内容,firstCol是搜索开始列,firstRow是搜索开始行,同样lastCol,lastRow是结束列和行
//reverse 是指示是否执行反向搜索,反向搜索是从行、列数大的开始向小的方向搜索。true是执行反向搜索。
//也是返回第一个匹配单元格。
Cell cell4 = sheet.findCell("test",0,0,1,1,true);
System.out.println("表1内容为test单元格的行数: " + cell4.getRow());
//该函数后四个参数和上面函数一样,第一个参数是一个正则表达式。
Pattern p = Pattern.compile("a*b");
Cell cell5 = sheet.findCell(p, 0, 0, 2, 2, false);
System.out.println("表1内容为正则表达式 a*b 单元格的行数: " + cell5.getRow());
System.out.println("表1内容为正则表达式 a*b 单元格的内容是: " + cell5.getContents());
//该函数与findCell前面的特性一样,这种方法与findCell方法的不同之处在于,只有标签单元格查询,
//所有的数值单元格被忽略。这应该提高性能。
LabelCell labelCell = sheet.findLabelCell("test");
System.out.println("标签单元格内容: " + labelCell.getContents());
//得到工作表中的超链接数组
Hyperlink [] hyperlinkList = sheet.getHyperlinks();
System.out.println("工作表中超链接个数: " + hyperlinkList.length);
//得到工作表中合并单元格的range数组
Range [] rangeList = sheet.getMergedCells();
System.out.println("工作表中有多少个合并的单元格: " + rangeList.length);
//得到用于表的settings
SheetSettings sheetSet = sheet.getSettings();
//得到指定列的列格式,如果没有特殊的格式则返回NULL
jxl.format.CellFormat cellFormat = sheet.getColumnFormat(0);
//返回指定列的宽度,如果没有特殊格式怎返回默认值
int columnWidth = sheet.getColumnWidth(0);
System.out.println("工作表第一列宽度: " + columnWidth);
//得到指定列格式
CellView cellViewCol = sheet.getColumnView(1);
//得到指定行的高度
int rowHeight = sheet.getRowHeight(0);
System.out.println("工作表第一行高度: " + rowHeight);
//得到指定行格式
CellView cellViewRow = sheet.getRowView(0);
cellViewRow.setHidden(true);
//得到工作表中图像数
int numberOfImages = sheet.getNumberOfImages();
System.out.println("工作表中图片个数: " + numberOfImages);
//返回指定位置的图像,索引从0开始
Image image = sheet.getDrawing(0);
System.out.println("工作表中第一个图像的列位置: " + image.getColumn());
//返回工作表的分页符
int [] rowPageBreaks = sheet.getRowPageBreaks();
//System.out.println("工作表分页符: " + rowPageBreaks[0]);
//返回工作表的分页符
int [] columnPageBreaks = sheet.getColumnPageBreaks();
//System.out.println("工作表分页符: " + columnPageBreaks[0]);
book.close();
}catch (IOException | BiffException | IndexOutOfBoundsException e)
System.out.println("Exception: " + e);
工作表的操作如上面的程序所示,更多的细节可以具体在实践实践。这里需要注意的是Excel表格里的内容。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!您还可以使用以下方式登录
当前位置:&>&&>&&>& >
jxl读取excel文件时的多语言和本地化
jxl读取excel文件时的多语言和本地化
private&&& Workbook createWorkbook(InputStream ins){&&&&& try {&&&&&&& WorkbookSettings setting=new WorkbookSettings();//&&&&&&& String defaultEncoding=setting.getEncoding();//&&&&&&& System.out.println(&defaultEncoding: &+defaultEncoding);&&&&&&& setting.setEncoding(&iso-8859-1&);&&&&&&& wb=Workbook.getWorkbook(ins,setting);&&&&&&&&&&&&& } catch (Exception e) {&&&&&&&&&&&& }&&&& }在使用jxl读取excel文件时,如果涉及到多语言和本地化时,需要为创建的Workbook指定Encoding CharSet。可以通过WorkbookSettings的setEncoding(String charset);对其进行设定。默认情况下,WorkbookSettings指定的Encoding CharSet是系统默认的CharSet编码。&&&&& iso-8859-1这种编码方式的特别之处是它能保留所读取内容的原始编码格式,因为iso-8859-1中包含的字符可以涵盖字节码中所有的字符。另外,它也是浏览器、数据库等默认的编码格式,在默认情况下可以不必进行额外的转换步骤。作者 &左罗CTO&就爱阅读www.92to.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    记录的我学习,希望对你有所帮助(有错请指正)
我的Jxl使用总结
创建或读取一个工作薄
创建一个工作薄:
// 创建Excel工作表 指定名称和位置
String fileName = File.separator +"POS全场折扣-批次:"+
//文件名// createExcel文件String filePath = FileUtil.POS_root + File.separator +"全场POS折扣信息-批次号:"+//路径if (!new File(filePath).exists()) {new File(filePath).mkdirs();}filePath += fileName + ".xls";OutputStream os = new FileOutputStream(filePath);
//创建一个工作薄WritableWorkbook wb = Workbook.createWorkbook(os);// 创建Excel工作表 指定sheet的名称和位置WritableSheet sheet = wb.createSheet("POS折扣信息", 0);
WritableCellFormat center = new WritableCellFormat(); center.setAlignment(Alignment.CENTRE); //字体在单元格居中sheet.addCell(new Label(2, 2, "POS折扣批次号(BatchID):",center));
//new Label(a, b, 单元格显示文本,center)
a,b从0开始,a为列,b为行sheet.mergeCells(a, b, c, d);//(a,b)为起始单元格的列和行,(c,d)为结束单元格的列和行
wb.write();wb.close();os.close();
// 下载excel文件OutputStream os2 = response.getOutputStream();try {File f = new File(filePath);response.setContentType("application/vnd.ms- charset=GB2312");// 文件内容乱码response.setHeader("Content-Disposition", "filename="+ URLEncoder.encode(f.getName(), "UTF-8"));byte buffer[] = new byte[4096];FileInputStream fin = new FileInputStream(f);while ((size = fin.read(buffer)) != -1) {os2.write(buffer, 0, size);}} catch (Exception e) {e.printStackTrace();} finally {os2.close();}
引用的包:
import java.io.F
import java.io.FileOutputS
import java.io.FileInputS
import java.io.IOE
import java.io.OutputS
import java.io.UnsupportedEncodingE
import java.net.URLE
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import jxl.C
import jxl.CellV
import jxl.W
import jxl.format.UnderlineS
import jxl.write.A
import jxl.write.L
import jxl.write.WritableCellF
import jxl.write.WritableF
import jxl.write.WritableS
import jxl.write.WritableW
//标题格式//构造格式:ARIAL字体、10号、粗体、非斜体、无下划线、黑色
WritableFont header = new WritableFont(WritableFont.createFont("微软雅黑"),10,WritableFont.BOLD,
false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
WritableCellFormat heaerline = new WritableCellFormat(header);
//文字垂直居中对齐
heaerline.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//文字水平居中对齐
heaerline.setAlignment(jxl.format.Alignment.CENTRE);
//内容格式
sheet.setColumnView(1, 20);;// 第 第二列 的宽度20
WritableCellFormat center = new WritableCellFormat(); center.setAlignment(Alignment.CENTRE); sheet.addCell(new Label(2, 2, "POS折扣批次号(BatchID):",heaerline));sheet.mergeCells(2, 2, 5, 2);
以下内容转载:
1、创建或读取一个工作薄 Workbook
创建一个工作薄,就是整个Excel文档,
WritableWorkbook wwb = Workbook.createWorkbook(os);
其中os为一个文件输出流。当然还有很多其他的入参,比如File等。
Workbook不但能用来创建工作薄,也可以读取现有的工作薄,比如:
Workbook.getWorkbook(java.io.File file);
Workbook是一个很重要工具类,里面方法基本上都是static的,使用方便。
2、创建工作表 Sheet
创建工作表的方式是通过上面创建的WritableWorkbook对象来操作。
创建一个工作表:
createSheet(java.lang.String name, int index),
两个参数分别是工作表名字和插入位置,这个位置从0开始,比如:
WritableSheet sheet = wwb.createSheet("演员表", 0);
3、创建标签 Label
实际上标签这里的意思就是工作表的单元格,这个单元格多种,分别对应不同的类,比如jxl.write.Boolean、jxl.write.Boolean等。
Label label = new Label(col, row, title);
三个参数分别表示col+1列,row+1行,标题内容是title。
将标签加入到工作表中
sheet.addCell(label);
4、填充数据
数据填充这块稍微复杂点,涉及到数据单元格的格式问题。
a)、填充数字
jxl.write.Number numb = new jxl.write.Number(1, 1, 250);
sheet.addCell(numb);
b)、填充格式化的数字
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);
jxl.write.Number n = new jxl.write.Number(2, 1, 2.451, wcf);
sheet.addCell(n);
c)、填充日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String newdate = sdf.format(new Date());
label = new Label(2, 2, newdate);
sheet.addCell(label);
d)、填充文本
label = new Label(3, 3, "周星驰");
sheet.addCell(label);
e)、填充boolean值
jxl.write.Boolean bool = new jxl.write.Boolean(4, 1, true);
sheet.addCell(bool);
5、合并单元格
通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的。
表示将从第x+1列,y+1行到m+1列,n+1行合并 (四个点定义了两个坐标,左上角和右下角)
结果是合并了m-x+1行,n-y+1列,两者乘积就是合并的单元格数量。
sheet.mergeCells(0, 6, 3, 8);
label = new Label(0, 6, "合并了12个单元格");
sheet.addCell(label);
6、添加单元格的式样
主要是改变单元格背景、字体、颜色等等。
WritableCellFormat wc = new WritableCellFormat();
// 设置居中
wc.setAlignment(Alignment.CENTRE);
// 设置边框线
wc.setBorder(Border.ALL, BorderLineStyle.THIN);
// 设置单元格的背景颜色
wc.setBackground(jxl.format.Colour.RED);
label = new Label(1, 5, "字体", wc);
sheet.addCell(label);
7、设置单元格字体
// 设置字体
jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("楷书"), 20);
WritableCellFormat font = new WritableCellFormat(wfont);
label = new Label(2, 6, "楷书", font);
sheet.addCell(label);
8、将工作写成文件
// 写入数据
wwb.write();
// 关闭文件
wwb.close();
9、行列的批量操作
//获取所有的工作表
jxl.write.WritableSheet[] sheetList = wwb.getSheets();
//获取第1列所有的单元格
jxl.Cell[] cellc = sheet.getColumn(0);
//获取第1行所有的单元格
jxl.Cell[] cellr = sheet.getRow(0);
//获取第1行第1列的单元格
Cell c = sheet.getCell(0, 0);
10、获取单元格的值
//获取单元格的值,不管什么单元格,返回都是字符串
String value = c.getContents();
WritableWorkbook workbook = Workbook.createWorkbook(tempFile);
WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);
//一些临时变量,用于写到excel中
Label l=null;
jxl.write.Number n=null;
jxl.write.DateTime d=null;
//预定义的一些字体和格式,同一个Excel中最好不要有太多格式
WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD,
false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);
WritableCellFormat headerFormat = new WritableCellFormat (headerFont);
WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,
false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);
WritableCellFormat titleFormat = new WritableCellFormat (titleFont);
WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,
false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
WritableCellFormat detFormat = new WritableCellFormat (detFont);
NumberFormat nf=new NumberFormat("0.00000"); //用于Number的格式
WritableCellFormat priceFormat = new WritableCellFormat (detFont, nf);
DateFormat df=new DateFormat("yyyy-MM-dd");//用于日期的
WritableCellFormat dateFormat = new WritableCellFormat (detFont, df);
//剩下的事情,就是用上面的内容和格式创建一些单元格,再加到sheet中
l=new Label(0, 0, "用于测试的Excel文件", headerFormat);
sheet.addCell(l);
//add Title
int column=0;
l=new Label(column++, 2, "标题", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "日期", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "货币", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "价格", titleFormat);
sheet.addCell(l);
//add detail
l=new Label(column++, i+3, "标题 "+i, detFormat);
sheet.addCell(l);
d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);
sheet.addCell(d);
l=new Label(column++, i+3, "CNY", detFormat);
sheet.addCell(l);
n=new jxl.write.Number(column++, i+3, 5.678, priceFormat);
sheet.addCell(n);
l=new Label(column++, i+3, "标题 "+i, detFormat);
sheet.addCell(l);
d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);
sheet.addCell(d);
l=new Label(column++, i+3, "SGD", detFormat);
sheet.addCell(l);
n=new jxl.write.Number(column++, i+3, 98832, priceFormat);
sheet.addCell(n);
//设置列的宽度
sheet.setColumnView(column++, 20);
sheet.setColumnView(column++, 20);
sheet.setColumnView(column++, 10);
sheet.setColumnView(column++, 20);
workbook.write();
workbook.close();
我正在做的项目里定义了很多样式,好像速度也不算慢,还有一些其他方面的定义,补充到下面:
//构造格式:ARIAL字体、10号、粗体、非斜体、无下划线、黑色
WritableFont fmtx2TotalCaption = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,
false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
WritableCellFormat totalx2Format = new WritableCellFormat(fmtx2TotalCaption);
//文字垂直居中对齐
totalx2Format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//文字水平居中对齐
totalx2Format.setAlignment(jxl.format.Alignment.CENTRE);
//边框深蓝色
totalx2Format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN,
jxl.format.Colour.DARK_BLUE);
//设置底色为冰蓝
totalx2Format.setBackground(jxl.format.Colour.ICE_BLUE);
sheet.mergeCells(0, row, 8, row);
//合并单元格,row 到 row 行,0 到 8 列
sheet.setRowView(row, 600);// 第 row 行的高度
另外就是要在 Action(servlet) 中这么写,IE就会直接弹出保存文件的对话框(注意要占用当前窗口):
String title = "XXXX统计";
OutputStream out = response.getOutputStream();
WritableWorkbook wb = Workbook.createWorkbook(out);
response.setContentType("aplication/vnd.ms-excel");
response.addHeader("Content-Disposition"," filename=" + new String(title.getBytes("GB2312"),"ISO8859_1") + ".xls");
//有中文必须转码
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!博客分类:
WritableFont headFont = new WritableFont(WritableFont.TIMES, 14,WritableFont.BOLD);
//设置标题,字号14,加粗
&P&WritableFont countents = new WritableFont(WritableFont.TIMES,12); // 设置单元格内容,字号12
WritableCellFormat cell = new WritableCellFormat(contentFont);
cell.setAlignment(jxl.format.Alignment.CENTRE);// 单元格内容水平居中
cell.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 单元格内容垂直居中
cell.setBorder(Border.ALL, BorderLineStyle.THIN,jxl.format.Colour.BLACK); // 边框
// Border.ALL:上下左右都设置边框; BorderLineStyle.THIN: 细边框; jxl.format.Colour.BLACK: 黑颜色
cell.setWrap(true);//是否换行
WritableSheet sheet = book.createSheet("公文检索", 0); //创建一个新sheet
sheet.setColumnView(0, 80); //第1列宽
sheet.setColumnView(1, 80); //第2列宽
sheet.setRowView(i+1, 400);//某行的行高,一般用在循环中
//合并单元格
sheet.mergeCells(3,0,4,0);//(列,行,列,行)
//设置页边距(0.1d=0.26cm)
sheet.getSettings().setBottomMargin(0.7d);
sheet.getSettings().setTopMargin(0.7d);
sheet.getSettings().setLeftMargin(0.75d);
sheet.getSettings().setRightMargin(0.75d);
//设置打印方向为 横向,不设置为纵向
sheet.setPageSetup(PageOrientation.LANDSCAPE.LANDSCAPE,PaperSize.A4,0.5d,0.5d);
//设置页码,3个参数位置分别对应:左边、中间、右边
sheet.setFooter("", "&P", "");
//设置冻结单元格,下拉时第一列固定
sheet.getSettings().setVerticalFreeze(1);
//设置是否显示行数列数编号
sheet.getSettings().setPrintHeaders(true);
浏览: 116254 次
来自: 北京
对于理解前后端交互很有帮助,解决datatables刷新问题, ...
觉得这个东西好古老啊
非常好,我也发现这个问题的。只是没有像你这样写成blog。向你 ...
daogugo 写道楼主好, 不知道楼主有没有空,请教下jQu ...
挺不错的,值得学习!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'Java操作Excel的两种方法(一)JXL
我的图书馆
Java操作Excel的两种方法(一)JXL
最近,通过搜索一些资料,做了了一个简单的java操作excel的小例子:
在java操作excel的工具中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI(即jxl)。
jxl相对于poi功能比较弱一点,jxl对中文的支持非常好,API是纯java的,并不依赖于Windows系统,运行在Linux下也同样能处理excel。但是比较局限的是jxl对图形和图表的支持很有限(我想这一点估计跟朋友们公司做的操作excel时选择POI的缘由),仅仅能识别png格式。
因为我只是做一个简单的小例子,而且以前没有用过java操作excel,所以就在网上随便搜了一下关于java操作excel的内容,最后我选择了用jxl,做了一读和修改已有的excel案例,把比较关键的code贴在下面&做这个有一个比较奇怪的感觉,好像跟之前的java读写文件很像&:
我在做的过程中遇到这样的一个错
&---jxl.read.biff.BiffException: Unable to recognize OLE stream---&
我在网上搜索了,也有很多出现这样的错,后来发现有人说是excel的版本问题,我机器上的excel是2007后缀以xlsx,后来搞成2003版本的就ok了。
package com.sample.
import java.io.BufferedWimport java.io.Fimport java.io.FileInputSimport java.io.FileNotFoundEimport java.io.FileWimport java.io.IOE
import com.sample.excel.inteface.ExcelIimport com.sun.org.apache.bcel.internal.classfile.F
import jxl.Cimport jxl.Simport jxl.Wimport jxl.read.biff.BiffE
关注:(使用jxl)java操作excel,一定离不了workbook
创建一个excel的时候,需要先得到一个可写的workbook
&WritableWorkbook&book = Workbook.createWorkbook(new File("test.xls"));
而读取一个excel的时候,需要得到这样一个workbook
Workbook&wb = Workbook.getWorkbook(new File("test.xls"));
修改一个excel的时候,需要这样一个workbook,它与创建excel时候的workbook类似,多了一个参数
Workbook wb = Workbook.getWorkbook(new File("test.xls"));
& WritableWorkbook writerBook = Workbook.createWorkbook(new File("test.xls"), wb);
//创建excel
public class ExcelCreate(){
&&&&&&&&& public static void createExcel(){
&&&&&&&&&&&&&&&&&&&&& //创建workbook
&&&&&&&&&&&&&&&&&&&&& WritableWorkbook&book = Workbook.createWorkbook(new File("test.xls"));
&&&&&&&&&&&&&&&&&&&&&//表示生成一个名称为sheet1的sheet(工作表),参数0表示第一页&
& &&&&&&&&&&&&&&&&&&&& WritableSheet sheet = book.createSheet("sheet1",0);
&&&&&&&&&&&&&&&&&&&&& //指明单元格的位置是第一行第一列,并且内容为"test"
&&&&&&&&&&&&&&&&&&&&& Label label = new Label(0,0,"test");
&&&&&&&&&&&&&&&&&&&&& //把该label加入到工作表中(注意只有可写的workbook和可写的sheet才能做这些增加,删除....操作)
&&&&&&&&&&&&&&&&&&&&&& sheet.addCell(label);
&&&&&&&&&&&&&&&&&&&&&& book.write();
&&&&&&&&&&&&&&&&&&&&&& book.close();
&&&&&&&&& }
public class ExcelReader {&private static ExcelInterface checkExcel =&//private static ExcelInterface excelInterface =&private static Workbook wb =&//读取excel中的某一个 sheet.&public static void readExcel(File excelFile){&&try {&&&FileInputStream is = new FileInputStream(excelFile);&&&//读取excel数据表的第一步是创建workbook工作簿&&&wb = Workbook.getWorkbook(is);&&&//通过 workbook来 访问excel sheet&&&Sheet sh1 = wb.getSheet(2);&&&//通过 sheet访问excel cell,获取第一行第一列 的值&&&//&Cell c1 = sh1.getCell(1, 0);&&&//获得excel所有sheet的名称&&&&&&/*String sheetNames[] = wb.getSheetNames();
//读取一个excel里的所有sheet名称&&&for (int i = 0; i & sheetNames. i++) {&&&&System.out.println("sheet name="+ i +sheetNames[i]);&&&}*/&&&int columns = sh1.getColumns();&&&&&&for (int i = 0; i & sh1.getRows(); i++) {&&&&//String[] nextLine = new String[columns];&&&&System.out.println();&&&&for (int j = 0; j & j++) {
//注意任何一个cell(单元格)getContents()以后都会得到一个字符串(不管它原来是什么类型,eg:整形、浮点型、字符....)&&&&&String cellVal = sh1.getCell(j, i).getContents();&&&&&//System.out.print(sh1.getCell(j, i).getContents()+" || ");&&&&&if(j == 1){&&&&&&checkExcel = new CheckExcel();&&&&&&//主义getCell(j,i):i表示行,j表示列=&这一点要非常注意,excel里行列都是从0开始&&&&&&if(checkExcel.checkColumn(sh1.getCell(j, i).getContents())){&&&&&&&cellVal = cellVal + "(Statutory Holiday)";&&&&&&}&&&&&}&&&&&System.out.print(cellVal+" || ");&&&&}&&&}&&&//关闭&&&wb.close();&&} catch (FileNotFoundException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&} catch (BiffException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&} catch (IOException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&}&&&}&&//读取excel里面的所有sheet&public static void readAllSheetInExcel(File filePath){&&try {&&&FileInputStream is = new FileInputStream(filePath);&&&wb = Workbook.getWorkbook(is);&&&checkExcel = new CheckExcel();&&&//获得所有的sheet&&&Sheet[] sh = wb.getSheets();&&&for (int i = 0; i & sh. i++) {&&&&Sheet sheet = sh[i];&&&&System.out.println("sheet name:"+sheet.getName());&&&&for (int j = 1; j & sheet.getRows(); j++) {&&&&&System.out.println();&&&&&boolean isHoliday =&&&&&String date =&&&&&String errormsg="in sheet" + "[" + sheet.getName() +"],";&&&&&String lineContent = "";&&&&&int errorCount = 0;&&&&&for (int n = 0; n & sheet.getColumns(); n++) {&&&&&&String cellVal = sheet.getCell(n, j).getContents();&&&&&&lineContent = lineContent + "|" + cellV&&&&&&System.out.print(cellVal + "|");
//下面的是对excel里面的某些内容进行check,加了一些逻辑&&&&&&if(n == 1){&&&&&&&date = sheet.getCell(n, j).getContents();&&&&&&&isHoliday = checkExcel.checkColumn(date);&&&&&&&errormsg = errormsg +&&&&&&}&&&&&&if(n == 3 && isHoliday){&&&&&&&String expectedVal = "GEN";&&&&&&&String info = checkExcel.checkColumnContent(cellVal, expectedVal);&&&&&&&//System.out.println("info/////"+info);&&&&&&&String msg = getErrorMsg(errormsg, info);&&&&&&&if(null != msg){&&&&&&&&writeErrorMsg(msg);&&&&&&&&errorCount = errorCount + 1;&&&&&&&}&&&&&&}&&&&&&if(n == 4 && isHoliday){&&&&&&&String expectedVal = "HOL";&&&&&&&String info = checkExcel.checkColumnContent(cellVal, expectedVal);&&&&&&&String msg = getErrorMsg(errormsg, info);&&&&&&&if(null != msg){&&&&&&&&writeErrorMsg(msg);&&&&&&&&errorCount = errorCount + 1;&&&&&&&}&&&&&&}&&&&&}&&&&&if(errorCount & 0){&&&&&&errormsg = "please refer to this sheet"+"("+sheet.getName()+")"+"in following line:";&&&&&&writeErrorMsg(errormsg);&&&&&&writeErrorMsg(lineContent);&&&&&}&&&&}&&&&System.out.println();&&&}&&} catch (FileNotFoundException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&} catch (BiffException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&} catch (IOException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&}&&&}&&private static String getErrorMsg (String appendMsg,String info){&&String errormsg =&&if(null != info && !info.equals("")){&&&errormsg = appendMsg +&&}&&&&&}&&//将读到的excel里的内容,检查出来的不对的写入log.txt&public static void writeErrorMsg(String msg){&&File f = new File("D:/excelSample/error.log");&&try{&&&if(f.exists()){&&&&//System.out.println("文件已存在");&&&}&&&else{&&&&f.createNewFile();&&&}&&&msg += "\r\n";&&&//FileWriter fw = new FileWriter(f);&&&FileWriter fw = new FileWriter(f, true);&&&&&&fw.write(msg);&&&fw.close();&&&/*BufferedWriter writer = new BufferedWriter(new FileWriter(f));&&&//writer.append();&&&writer.newLine();&&&writer.write(msg);&&&&&&writer.close();*/&&} catch (IOException e) {&&&// TODO Auto-generated catch block&&&e.printStackTrace();&&}&}&&public static void main(String[] args) {&&//ExcelReader.readExcel(new File("D:/excelSample/2.xls"));&&ExcelReader.readAllSheetInExcel(new File("D:/excelSample/2.xls"));&&//ExcelReader.writeErrorMsg();&}}
//修改已存在的excel
public class ExcelUpdate {
&&&&&&&&&&& public static void updateExcel(){
&&&&&&&&&&&&&&&&&&&&&&& Workbook wb = Workbook.getWorkbook(new File("test.xls"));
&&&&&&&&&&&&&&&&&&&&&&&& //注意这里面的两个参数:指定数据写回到原文件(给上面的wb附属一个可写的功能&个人理解&)
&&&&&&&&&&&&&&&&&&&&&&&& WritableWorkbook writerBook = Workbook.createWorkbook(new File("test.xls"), wb);
&&&&&&&&&&&&&&&&&&&&&&&& //用writerBook(可写的workbook)创建的sheet也是一个可写的sheet
&&&&&&&&&&&&&&&&&&&&&&&&& WritableSheet sh =&writerBook.createSheet("sheet2",1);&
&&&&&&&&&&&&&&&&&&&&&&&&& sh.addCell(new Label(0,0,"test2"));
&&&&&&&&&&&&&&&&&&&&&&&&& book.write();
&&&&&&&&&&&&&&&&&&&&&&&&& book.close();
&&&&&&&&&&& }
喜欢该文的人也喜欢}

我要回帖

更多关于 excel表格不显示sheet 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信