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表格里的内容。
基础内容来自http://blog.csdn.net/z562743237/article/details/8592012 项目中我们经常会遇到 表格 操作 ,目前用的比较多的是 jxl 和poi两种方式 操作 表格 。以下是用 jxl 读取 表格 和生成 表格 的方法。 package com.sunyard.iccs.report.util; import java.io.File; import java.i
最近因工作需要,对 Excel 的解析方面的技术进行了一些恶补! 对用 JXl /POI解析 Excel 文档做了一些练习,个人觉得 JXL 顺手一点,就做了个读取的例子! 只要到入 JXL 的包即可! JXL 的主页是:http
Java代码 java.lang.NullPointerException at jxl .write.biff.Writable Sheet Copier.shallowCopyCells(Writable Sheet Copier.java:499) [ jxl .ja r:na] at jxl .write.biff.Writable Sheet Copier.copy Sheet (Writable Sheet Copier.java:239) [ jxl .jar:na] at jxl .write.biff.Writable Sheet Impl.copy(Writable Sheet Impl.java:1622) [ jxl .jar:na] at jxl .write.biff.WritableWorkbookImpl.copy Sheet (WritableWorkbookImpl.java:987) [ jxl .jar:na] 今天调试了一下,发现在 jxl .write.biff.Writable Sheet Copier.shallowCopyCells方法中有如下代码 Java代码 if (c.getCellFeatures() != null & c.getCellFeatures().hasDataValidation()) validatedCells.add(c); 细心的人都不难发现,代码中少写了一个&符,虽然也可以用来表示“且”的逻辑,但一个&符是没有用到短路算法的,这样就会导致不 管&前面表达式的结果是true还是flase,&符后面的表达式都会执行。在这段代码中,在c.getCellFeatures()是 null 的情况下,c.getCellFeatures().hasDataValidation()必然会报 java.lang.NullPointerException异常。 想不到有么有名的 jxl 也会犯这么低级的错误。
使用 jxl excel 表中的数据进行读取,简单处理后再重新写入另一 表格 ,前面一部分是读取 Excel ,后一部分是写入 Excel 。 用百度网盘分享一下源码,所需要的 jxl 包也在里面 链接:https://pan.baidu.com/s/1L2L-qo94DjPPFgt3zH6YKw 提取码:drz4 复制这段内容后打开百度网盘手机App, 操作 更方便哦 package read; import ja...
是的,Java中可以使用 jxl 库来处理 Excel 文件。 jxl 是一种开源的Java API,它提供了许多类和方法来读取、写入和修改 Excel 文件。以下是一个简单的例子,演示如何使用 jxl 库读取 Excel 文件中的数据: import jxl .*; import java.io.*; public class Read Excel { public static void main(String[] args) { try { // 打开文件 Workbook workbook = Workbook.getWorkbook(new File("data.xls")); // 获取第一个工作表 Sheet sheet = workbook.get Sheet (0); // 获取行数和列数 int rows = sheet .getRows(); int cols = sheet .getColumns(); // 遍历行和列,读取数据 for (int row = 0; row < rows; row++) { for (int col = 0; col < cols; col++) { Cell cell = sheet .getCell(col, row); System.out.print(cell.getContents() + "\t"); System.out.println(); // 关闭文件 workbook.close(); } catch (Exception e) { e.printStackTrace(); 该程序打开名为data.xls的 Excel 文件,并读取第一个工作表的所有数据,然后将其打印到控制台上。你可以根据需要修改该程序,以实现其他 Excel 文件处理任务。
爱你的小伟3: 实际验证中发现,诸如RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000) .setConnectionRequestTimeout(35000)// 请求超时时间 .setSocketTimeout(60000)// 数据读取超时时间 .build(); 是无效的,参考 https://stackoverflow.com/questions/28785085/how-to-prevent-hangs-on-socketinputstream-socketread0-in-java ,我试验了一个办法,前提是你因为是使用apache的httpClient 才导致的阻塞 // 创建httpClient实例 (设置SO_TIME_OUT避免线程一直RUNNABLE) DefaultHttpClient httpClient = new DefaultHttpClient(); HttpParams httpParams = new BasicHttpParams(); // 10 seconds max wait for response from server, after establishing socket connection httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000); httpClient.setParams(httpParams); 本地测试可以规避上述问题