Java中操控Excel、PDF文件

合集下载

Java中操作Excel表格方法

Java中操作Excel表格方法

Java中操作Excel表格方法Java中操作Excel表格方法引导语:我们都知道Excel 可以进行各种数据的处理、统计分析和辅助决策操作,那么在Java中又是如何操作Excel 表格的呢,以下是店铺分享给大家的Java中操作Excel表格方法,欢迎阅读!利用Java Excel API ,下载地址:jexcelapi.rar下面给出一段读取数据的例子代码:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package excel;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.logging.Level;import java.util.logging.Logger;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;/**** @author Wei.Liu*/public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {try {InputStream is = new FileInputStream("d:\\test.xls"); jxl.Workbook rwb = Workbook.getWorkbook(is); Sheet rs = rwb.getSheet(0);//取第一行,第一列的元素Cell c00 = rs.getCell(0, 0);String strc00 = c00.getContents();//取第一行,第二列的`元素Cell c10 = rs.getCell(1,0);String strc10= c10.getContents();System.out.println(strc00+" "+c00.getType().toString()); System.out.println(strc10+" "+c10.getType().toString()); //获取sheet的个数System.out.println(rwb.getNumberOfSheets());Sheet [] sheets =rwb.getSheets();for(int i=0;iSystem.out.println(rwb.getSheet(i).getName());}//获得列数System.out.println(rwb.getSheet(0).getColumns());//获得每列的元素Cell [] cell = rwb.getSheet(0).getColumn(0);//获得总行数System.out.println(rwb.getSheet(0).getRows());//获得行元素Cell [] cell2 = rwb.getSheet(0).getRow(0);//关闭对象rwb.close();} catch (Exception ex) {Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);}}}再给出一段,创建Excel表格的代码:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package excel;import java.io.File;import java.util.logging.Level;import java.util.logging.Logger;import jxl.Workbook;import bel;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.Number;/**** @author Wei.Liu*/public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {try {//创建EXCEL表格WritableWorkbook wwb = Workbook.createWorkbook(new File("d:\\test.xls"));//创建工作表WritableSheet ws = wwb.createSheet("Liu.Wei",0);//创建单元格ws.addCell(new Label(0,0,"Hello World"));//添加设置字体格式的单元格WritableFont wfc = new WritableFont(WritableFont.ARIAL,15,WritableFont.BOLD,true);WritableCellFormat wcff= new WritableCellFormat(wfc);Label labelcf = new Label(1,0,"Format text",wcff);ws.addCell(labelcf);//向单元格中写入数字Number labelN = new Number(0,1,12345);ws.addCell(labelN);wwb.write();wwb.close();} catch (Exception ex) {Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);}}}最后给出一段更新表格的代码:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package excel;import java.io.File;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import jxl.CellType;import jxl.Workbook;import jxl.read.biff.BiffException;import bel;import jxl.write.WritableCell;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;/**** @author Wei.Liu*/public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {try {Workbook rw = Workbook.getWorkbook(new File("d:\\test.xls"));WritableWorkbook wwb = Workbook.createWorkbook(new File("d:\\test.xls"),rw);//修改单元格的值WritableSheet ws = wwb.getSheet(0);WritableCell wc = ws.getWritableCell(0,0);if(wc.getType() == BEL){Label l= (Label)wc;l.setString("Modified");}wwb.write();wwb.close();rw.close();} catch (Exception ex) {Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);}}}【Java中操作Excel表格方法】。

excel java 列操作的方法

excel java 列操作的方法

excel java 列操作的方法在Java中与Excel进行交互是数据处理和报告生成中的一个常见需求。

Apache POI是一个流行的Java库,用于处理Microsoft Office文档,包括Excel。

本文将详细介绍几种使用Java对Excel中的列进行操作的方法。

### Excel列操作基础在进行列操作之前,需要确保你的项目中已经添加了Apache POI的依赖。

以下是一些基本的操作方法:#### 1.读取列数据```javaimport ermodel.*;public class ExcelColumnReader {public static void readColumnData(String excelFilePath, int sheetIndex, int columnIndex) throws IOException {try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {Cell cell = row.getCell(columnIndex);if (cell != null) {// 根据不同的数据类型处理单元格数据switch (cell.getCellType()) {case STRING:System.out.println(cell.getStringCellValue());break;case NUMERIC:System.out.println(cell.getNumericCellValue());break;// 其他类型处理...}}}}}}```#### 2.写入列数据```javaimport ermodel.*;public class ExcelColumnWriter {public static void writeColumnData(String excelFilePath, intsheetIndex, int columnIndex, String data) throws IOException {try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis);FileOutputStream fos = newFileOutputStream(excelFilePath)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {Cell cell = row.createCell(columnIndex);cell.setCellValue(data);}workbook.write(fos);}}}```#### 3.删除列```javaimport ermodel.*;public class ExcelColumnDeleter {public static void deleteColumn(String excelFilePath, int sheetIndex, int columnIndex) throws IOException {try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis);FileOutputStream fos = newFileOutputStream(excelFilePath)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {row.removeCell(row.getCell(columnIndex));}workbook.write(fos);}}}```### 高级列操作除了基本的读取、写入和删除操作外,以下是一些更高级的列操作方法:#### 1.复制列```java// 此处省略具体代码,因为复制列涉及到位操作和单元格样式复制等复杂操作```#### 2.遍历列并应用公式```javaimport ermodel.*;public class ExcelColumnFormulaApplier {public static void applyFormula(String excelFilePath, int sheetIndex, int columnIndex, String formula) throws IOException { try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis);FileOutputStream fos = newFileOutputStream(excelFilePath)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {Cell cell = row.createCell(columnIndex);cell.setCellFormula(formula);}workbook.write(fos);}}}```#### 3.格式化列```java// 格式化列涉及到创建单元格样式,并对列中的所有单元格应用这个样式```### 结论使用Java对Excel进行列操作是一个强大且灵活的过程,可以满足各种数据处理需求。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案。。。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案。。。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现⽅案。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现⽅案及开发中的点滴分享 在此,先分享下写此⽂前的经历与感受,我所有的感觉浓缩到⼀个字,那就是:"坑",如果是两个字那就是"巨坑"=>因为这个需求⼀开始并不是这样⼦的,且听我漫漫道来: ⼀开始客户与我们商量的是将office和PDF上传,将此类⽂件解析成html格式,在APP端调⽤内置server直接以html"播放" 经历⼀个⽉~,两个⽉~,三个⽉~~~ 到需求开发阶段,发现这是个坑。

:按照需规的意思这个整体是当做⼀个功能来做的,技术难度也就算了,⽽且按照估算的⼯时也很难做成需规所需要的样⼦(缺陷太多!) 然后⼀周~,⼀周~,⼜⼀周~~~ 各种⽅案下来将需求做成能⽤的样⼦,然后需求确认时客户说:“我们没有要求你们能解析这些⽂档,我们只要求你们当做⼀个源⽂件上传,在APP端点击直接能选择调⽤第三⽅应⽤打开就⾏了,⽽且⼀开始我们的需求就是这样的。

” /**听完,顿时泪流满⾯( _ ),如果业务⼀开始就确认这样做,何⾄于浪费如此多的时间,花费如此多的精⼒绕⽼⼤⼀圈。

*/ 需求绕了⼀圈⼜绕回来了,作为经历过的⼈,现在总结下这需求⾥⾯⽆尽的坑: A>开源社区有很多Demo,这些Demo有很多缺陷,⽐如office⾥⾯的艺术字、图⽚、公式、颜⾊样式、视频和⾳频不能解析 B>能解析的对象,解析出来的效果不是很好,⽐如word和ppt⾃⾝的排版乱了,excel单元格⾥⾯的⾃定义格式全变成数字了~等等 C>开源社区的资料并不是很全,导致的结果是不同的⽂档类型需要⽤不同的解析⽅式去解析,⽐如word⽤docx4j解析、excel⽤poi解析带来的代码量巨⼤ D>由于代码⾃⾝的解析效果不是很好,更改后的⽅案需要在上传之前将源⽂件处理成其他的形式,如pdf需要切成图⽚,ppt需要转换成视频或是图⽚,这样⼀来需求实现的⽅式就变成半⾃动了╥﹏╥... E>word⽤docx4j解析⼀个很⼤的问题是解析的效率太低了,5MB以上的⽂件或者内容⽐较复杂的word⽂档解析⼗分耗时,解析效率太低,再⼀就是poi解析数据量⽐较⼤的Exel(⽐如>1000⾏)容易造成内存溢出,不好控制 F>⼯时太短,只有15天。

利用java操作Excel文件

利用java操作Excel文件

利用java操作Excel文件很久以来都想研究一下利用java操作Excel的方法,今天没事,就稍微了解了一下,特总结一下。

利用java操作Excel,有个开源的东东-jxl.jar,可以到/project/showfiles.php?group_id=79926下载。

一.读取Excel文件内容java 代码1./**读取Excel文件的内容2. * @param file 待读取的文件3. * @return4. */5.public static String readExcel(File file){6. StringBuffer sb = new StringBuffer();7.8. Workbook wb = null;9. try {10. //构造Workbook(工作薄)对象11. wb=Workbook.getWorkbook(file);12. } catch (BiffException e) {13. e.printStackTrace();14. } catch (IOException e) {15. e.printStackTrace();16. }17.18. if(wb==null)19. return null;20.21. //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了22. Sheet[] sheet = wb.getSheets();23.24. if(sheet!=null&&sheet.length>0){25. //对每个工作表进行循环26. for(int i=0;i27. //得到当前工作表的行数28. int rowNum = sheet[i].getRows();29. for(int j=0;j30. //得到当前行的所有单元格31. Cell[] cells = sheet[i].getRow(j);32. if(cells!=null&&cells.length>0){33. //对每个单元格进行循环34. for(int k=0;k35. //读取当前单元格的值36. String cellValue = cells[k].getContents();37. sb.append(cellValue+"\t");38. }39. }40. sb.append("\r\n");41. }42. sb.append("\r\n");43. }44. }45. //最后关闭资源,释放内存46. wb.close();47. return sb.toString();48.}二.写入Excel文件这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api,同时还推荐一篇不错的文章:/developerworks/cn/java/l-javaExcel/?ca=j-t10java 代码1./**生成一个Excel文件2. * @param fileName 要生成的Excel文件名3. */4. public static void writeExcel(String fileName){5. WritableWorkbook wwb = null;6. try {7. //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象8. wwb = Workbook.createWorkbook(new File(fileName));9. } catch (IOException e) {10. e.printStackTrace();11. }12. if(wwb!=null){13. //创建一个可写入的工作表14. //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置15. WritableSheet ws = wwb.createSheet("sheet1", 0);16.17. //下面开始添加单元格18. for(int i=0;i<10;i++){19. for(int j=0;j<5;j++){20. //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行21. Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");22. try {23. //将生成的单元格添加到工作表中24. ws.addCell(labelC);25. } catch (RowsExceededException e) {26. e.printStackTrace();27. } catch (WriteException e) {28. e.printStackTrace();29. }30.31. }32. }33.34. try {35. //从内存中写入文件中36. wwb.write();37. //关闭资源,释放内存38. wwb.close();39. } catch (IOException e) {40. e.printStackTrace();41. } catch (WriteException e) {42. e.printStackTrace();43. }44. }45. }三.在一个Excel文件中查找是否包含某一个关键字java 代码1./**搜索某一个文件中是否包含某个关键字2. * @param file 待搜索的文件3. * @param keyWord 要搜索的关键字4. * @return5. */6. public static boolean searchKeyWord(File file,StringkeyWord){7. boolean res = false;8.9. Workbook wb = null;10. try {11. //构造Workbook(工作薄)对象12. wb=Workbook.getWorkbook(file);13. } catch (BiffException e) {14. return res;15. } catch (IOException e) {16. return res;17. }18.19. if(wb==null)20. return res;21.22. //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了23. Sheet[] sheet = wb.getSheets();24.25. boolean breakSheet = false;26.27. if(sheet!=null&&sheet.length>0){28. //对每个工作表进行循环29. for(int i=0;i30. if(breakSheet)31. break;32.33. //得到当前工作表的行数34. int rowNum = sheet[i].getRows();35.36. boolean breakRow = false;37.38. for(int j=0;j39. if(breakRow)40. break;41. //得到当前行的所有单元格42. Cell[] cells = sheet[i].getRow(j);43. if(cells!=null&&cells.length>0){44. boolean breakCell = false;45. //对每个单元格进行循环46. for(int k=0;k47. if(breakCell)48. break;49. //读取当前单元格的值50. String cellValue = cells[k].getContents();51. if(cellValue==null)52. continue;53. if(cellValue.contains(keyWord)){54. res = true;55. breakCell = true;56. breakRow = true;57. breakSheet = true;58. }59. }60. }61. }62. }63. }64. //最后关闭资源,释放内存65. wb.close();66.67. return res;68. }四.往Excel中插入图片图标插入图片的实现很容易,参看以下代码:java 代码1./**往Excel中插入图片2. * @param dataSheet 待插入的工作表3. * @param col 图片从该列开始4. * @param row 图片从该行开始5. * @param width 图片所占的列数6. * @param height 图片所占的行数7. * @param imgFile 要插入的图片文件8. */9.public static void insertImg(WritableSheet dataSheet, intcol, int row, int width,10. int height, File imgFile){11. WritableImage img = new WritableImage(col, row, width, height, imgFile);12. dataSheet.addImage(img);13.}以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:java 代码1. try {2. //创建一个工作薄3.WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));4.//待插入的工作表5.WritableSheet imgSheet = workbook.createSheet("Images",0);6.//要插入的图片文件7.File imgFile = new File("D:/1.png");8.//图片插入到第二行第一个单元格,长宽各占六个单元格9.insertImg(imgSheet,0,1,6,6,imgFile);10.workbook.write();11.workbook.close();12. catch (IOException e) {13. e.printStackTrace();14. catch (WriteException e) {15. e.printStackTrace();但是jxl只支持png格式的图片,jpg格式和gif格式都不支持五.插入页眉页脚一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚java 代码1./**向Excel中加入页眉页脚2. * @param dataSheet 待加入页眉的工作表3. * @param left4. * @param center5. * @param right6. */7.public static void setHeader(WritableSheet dataSheet,String left,String center,String right){8. HeaderFooter hf = new HeaderFooter();9. hf.getLeft().append(left);10. hf.getCentre().append(center);11. hf.getRight().append(right);12. //加入页眉13. dataSheet.getSettings().setHeader(hf);14. //加入页脚15. //dataSheet.getSettings().setFooter(hf);16.}我们可以用如下代码测试该方法:java 代码1. try {2. //创建一个工作薄3. WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));4. //待插入的工作表5. WritableSheet dataSheet = workbook.createSheet("加入页眉",0);6. ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06","第1页,共3页");7. workbook.write();8. workbook.close();9.} catch (IOException e) {10. e.printStackTrace();11.} catch (WriteException e) {12. e.printStackTrace();13.}14. }。

java操作excel知识点 -回复

java操作excel知识点 -回复

java操作excel知识点-回复如何使用Java操作Excel文件。

一、引言(100字)在日常工作和学习中,我们经常遇到需要处理大量数据的情况。

而Excel 作为一款强大的数据处理工具,被广泛应用于各行各业。

本文将介绍如何使用Java语言操作Excel文件,包括读取、写入和修改等功能。

二、Excel文件的读取(300字)1. 导入依赖库:首先,我们需要导入Apache POI库,该库提供了操作Excel的各种功能。

使用Maven构建的项目可以在pom.xml文件中添加以下依赖:xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>2. 创建Workbook对象:使用POI库需要创建Workbook对象来表示Excel文件。

可以根据文件的扩展名来确定具体的Workbook实现类,如XSSFWorkbook用于处理.xlsx文件,HSSFWorkbook用于处理.xls文件。

javaWorkbook workbook = new XSSFWorkbook(new FileInputStream("data.xlsx"));3. 获取Sheet对象:Excel文件由多个Sheet组成,可以通过Workbook 对象获取具体的Sheet对象。

javaSheet sheet = workbook.getSheetAt(0); 获取第一个Sheet4. 遍历行和单元格:使用Sheet对象可以遍历每一行和每一个单元格,并获取对应的数据。

javafor (Row row : sheet) {for (Cell cell : row) {String value = cell.getStringCellValue();System.out.println(value);}}三、Excel文件的写入(400字)1. 创建Workbook对象:同样地,我们需要创建Workbook对象来表示Excel文件。

Java操作excel的三种常见方法实例

Java操作excel的三种常见方法实例

Java操作excel的三种常见⽅法实例⽬录前⾔⼀、Apache poi1.1 ⾸先添加依赖1.2 导出excel1.2.1 HSSF⽅式导出(.xls⽅式)1.2.2 XSSF⽅式导出(.xlsx)1.2.3、SXSSF⽅式导出1.3 导⼊excel1.3.1 HSSF⽅式导⼊1.3.2 XSSF⽅式导⼊1.3.3 SXSSF⽅式导⼊⼆、Easypoi2.1 添加依赖包2.2 采⽤注解导出导⼊2.2.1 导出操作2.2.2 导⼊操作2.3 ⾃定义数据结构导出导⼊2.3.1 导出操作2.3.2 导⼊操作三、Easyexcel3.1 添加依赖包3.2 采⽤注解导出导⼊3.2.1 导出操作3.3 ⾃定义数据结构导出导⼊3.3.1 导出操作3.3.2 导⼊操作四、总结前⾔在平时的业务系统开发中,少不了需要⽤到导出、导⼊excel功能,今天我们就⼀起来总结⼀下!下⾯给⼤家介绍⼀下⼏种常⽤⽅法:apache poieasypoieasyexcel⼀、Apache poi⼤概在很久很久以前,微软的电⼦表格软件 Excel 以操作简单、存储数据直观⽅便,还⽀持打印报表,在诞⽣之初,可谓深得办公室⾥的⽩领青睐,极⼤的提升了⼯作的效率,不久之后,便成了办公室⾥的必备⼯具。

随着更多的新语⾔的崛起,例如我们所熟悉的 java,后来便有⼀些团队开始开发⼀套能与 Excel 软件⽆缝切换的操作⼯具!当然,在java⽣态体系⾥⾯,能与Excel⽆缝衔接的第三⽅⼯具还有很多,在开始也给⼤家列出来三个,因为 apache poi 在业界使⽤的最⼴泛,因此其他的⼯具不做过多介绍!话不多说,直接开撸!1.1 ⾸先添加依赖<dependencies><!--xls(03)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!--xlsx(07)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><!--时间格式化⼯具--><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.6</version></dependency></dependencies>1.2 导出excel导出操作,即使⽤ Java 写出数据到 Excel 中,常见场景是将页⾯上的数据导出,这些数据可能是财务数据,也可能是商品数据,⽣成 Excel 后返回给⽤户下载⽂件。

[转载]Java操作Excel文件的两种方案

[转载]Java操作Excel⽂件的两种⽅案 微软在桌⾯系统上的成功,令我们不得不⼤量使⽤它的办公产品,如:Word,Excel。

时⾄今⽇,它的源代码仍然不公开已封锁了我们的进⼀步应⽤和开发。

在我们实际开发企业办公系统的过程中,常常有客户这样⼦要求:你要把我们的报表直接⽤Excel打开。

或者是:我们已经习惯⽤Excel打印。

但是这种的客户需求在j2ee环境的环境下怎么实现?⼀.Java⽤POI操作Excel⽂件 Apache的Jakata项⽬的POI⼦项⽬的HSSF接⼝可以处理MS Excel(97-2002)对象。

它不象我们仅仅是⽤csv⽣成的没有格式的可以由Excel转换的东西,⽽是真正的Excel对象,你可以控制⼀些属性如sheet,cell等等。

另外,⽆锡永中Office的实现⽅案也是纯java的解决⽅案,不过那也是完全商业的产品,并不是公开代码项⽬。

其实,从开发历史的⾓度讲,在80年代中期starOffice的原作者在德国成⽴了StarOffice suite公司,然后到1999年夏天starOffice被sun收购,再到2000年6⽉starOffice5.2的发布;并且从starOffice6.0开始,starOffice建⽴在OpenOffice的api的基础上,这个公开代码的office项⽬已经进⾏了很长的时间。

虽然那是由C++写的,但是POI的代码部分也是由openOffice改过来的。

HSSF提供给⽤户使⽤的对象在ermodel包中,主要部分包括Excell对象,样式和格式,还有辅助操作。

有以下⼏种对象: HSSFWorkbook excell的⽂档对象 HSSFSheet excell的表单 HSSFRow excell的⾏ HSSFCell excell的格⼦单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat ⽇期格式在poi1.7中才有以下2项: HSSFHeader sheet头 HSSFFooter sheet尾和这个样式 HSSFCellStyle cell样式辅助操作包括 HSSFDateUtil ⽇期 HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表//利⽤Java 创建Excel⽂档import ermodel.*;import java.io.FileOutputStream;import java.io.IOException;public class CreateCells{public static void main(String[] args)throws IOException{HSSFWorkbook wb = new HSSFWorkbook();//建⽴新HSSFWorkbook对象HSSFSheet sheet = wb.createSheet("new sheet");//建⽴新的sheet对象// Create a row and put some cells in it. Rows are 0 based.HSSFRow row = sheet.createRow((short)0);//建⽴新⾏// Create a cell and put a value in it.HSSFCell cell = row.createCell((short)0);//建⽴新cellcell.setCellValue(1);//设置cell的整数类型的值// Or do it on one line.row.createCell((short)1).setCellValue(1.2);//设置cell浮点类型的值row.createCell((short)2).setCellValue("test");//设置cell字符类型的值row.createCell((short)3).setCellValue(true);//设置cell布尔类型的值HSSFCellStyle cellStyle = wb.createCellStyle();//建⽴新的cell样式cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));//设置cell样式为定制的⽇期格式HSSFCell dCell =row.createCell((short)4);dCell.setCellValue(new Date());//设置cell为⽇期类型的值dCell.setCellStyle(cellStyle);//设置该cell⽇期的显⽰格式HSSFCell csCell =row.createCell((short)5);csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中⽂⾼位字节截断csCell.setCellValue("中⽂测试_Chinese Words Test");//设置中西⽂结合字符串row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建⽴错误cell// Write the output to a fileFileOutputStream fileOut = new FileOutputStream("workbook.xls");wb.write(fileOut);fileOut.close();}} 通过这个例⼦,我们可以清楚的看到xls⽂件从⼤到⼩包括了HSSFWorkbook HSSFSheet HSSFRow HSSFCell这样⼏个对象。

java操作Excel文件

java的POI操作Excel文件2.为数据库建立索引首先建立一个类TestLucene.java。

这个类就是对数据库进行建立索引,编写查询条件等。

当然,最开始就是建立数据库连接。

连接代码这里就省略了。

^_^接着,新建一个方法getResutl(String),它返回的是数据库表Authors的内容。

具体代码如下:public ResultSet getResult(String sql){try{Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);return rs;}catch(SQLException e){System.out.println(e);}return null;}然后,为数据库建立索引。

首先要定义一个IndexWriter(),它是将索引写进Lucene自己的数据库中,它存放的位置是有你自己定义的。

在定义IndexWriter 是需要指定它的分析器。

Lucene自解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。

如果sheet是由POI生成的则没有这个问题。

我跟踪了setRowBreak的源代码,发现是Sheet.Java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发POI为rowBreaks创建实例。

2、如何拷贝行我在的POI用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写://注:this.fWorkbook是一个HSSHWorkbook,请自行在外部newpublic void copyRows(String pSourceSheetName,String pTargetSheetName,int pStartRow, int pEndRow,int pPosition){HSSFRow sourceRow = null;HSSFRow targetRow = null;HSSFCell targetCell = null;HSSFSheet sourceSheet = null;HSSFSheet targetSheet = null;Region region = null;int cType;int i;short j;int targetRowFrom;int targetRowTo;if ((pStartRow == -1) || (pEndRow == -1)){return;}sourceSheet = this.fWorkbook.getSheet(pSourceSheetName);targetSheet = this.fWorkbook.getSheet(pTargetSheetName);//拷贝合并的单元格for (i = 0; i < sourceSheet.getNumMergedRegions(); i++){region = sourceSheet.getMergedRegionAt(i);if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <= pEndRow)){targetRowFrom = region.getRowFrom() - pStartRow + pPosition;targetRowTo = region.getRowTo() - pStartRow + pPosition;region.setRowFrom(targetRowFrom);region.setRowTo(targetRowTo);targetSheet.addMergedRegion(region);}}//设置列宽for (i = pStartRow; i <= pEndRow; i++){sourceRow = sourceSheet.getRow(i);if (sourceRow != null){for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++) {targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j));}break;}}//拷贝行并填充数据for (;i <= pEndRow; i++){sourceRow = sourceSheet.getRow(i);if (sourceRow == null){continue;}targetRow = targetSheet.createRow(i - pStartRow + pPosition); targetRow.setHeight(sourceRow.getHeight());for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++) {sourceCell = sourceRow.getCell(j);if (sourceCell == null){continue;}targetCell = targetRow.createCell(j);targetCell.setEncoding(sourceCell.getEncoding());targetCell.setCellStyle(sourceCell.getCellStyle());cType = sourceCell.getCellType();targetCell.setCellType(cType);switch (cType){case HSSFCell.CELL_TYPE_BOOLEAN:targetCell.setCellValue(sourceCell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_ERROR:targetCell.setCellErrorV alue(sourceCell.getErrorCellValue());break;case HSSFCell.CELL_TYPE_FORMULA://parseFormula这个函数的用途在后面说明targetCell.setCellFormula(parseFormula(sourceCell.getCellFormula()));break;case HSSFCell.CELL_TYPE_NUMERIC:targetCell.setCellValue(sourceCell.getNumericCellV alue());break;case HSSFCell.CELL_TYPE_STRING:targetCell.setCellValue(sourceCell.getStringCellValue());break;}}}}这个函数有两个问题暂时无法解决:a、只能在同一个Workbook里面使用,跨Workbook总是拷不过去,不知道为什么?b、由于在拷贝行时也把行高也拷过去了,如果往这些单元格里写入的数据长度超过单元格长度,那么他们不会自动调整行高!3、公式的问题POI对Excel公式的支持是相当好的,但是我发现一个问题,如果公式里面的函数不带参数,比如now()或today(),那么你通过getCellFormula()取出来的值就是now(ATTR(semiV olatile))和today(ATTR(semiV olatile)),这样的值写入Excel是会出错的,这也是我上面copyRow的函数在写入公式前要调用parseFormula的原因,parseFormula这个函数的功能很简单,就是把ATTR(semiVolatile)删掉,我把它的代码贴出来:private String parseFormula(String pPOIFormula){final String cstReplaceString = "ATTR(semiV olatile)"; //$NON-NLS-1$StringBuffer result = null;int index;result = new StringBuffer();index = pPOIFormula.indexOf(cstReplaceString);if (index >= 0){result.append(pPOIFormula.substring(0, index));result.append(pPOIFormula.substring(index + cstReplaceString.length()));}else{result.append(pPOIFormula);}return result.toString();}至于为什么会出现ATTR(semiVolatile),还需要大家的探索精神!4、向Excel写入图片的问题。

【IT专家】使用java操作Excel文件

本文由我司收集整编,推荐下载,如有疑问,请与我司联系使用java 操作Excel 文件2007/07/06 720 1.必要性Excel 是一种常见的文档格式,通常情况下大多数的客户都对使用Excel 十分的精通。

对于我们来说,客户善于使用就可以使我们免于培训的烦恼。

而某些系统往往需要录入相当量的数据,这些数据一般以某种特定的格式保存。

而Excel 正是一种相当规格的数据保存方式,至少它是易于格式化的,而且客户也能够按照某种特定的格式来将数据录入到Excel 文件中去。

因此综上,我们有必要了解如何用纯java 来读取Excel 文件。

2.目的我们希望用户将资料录入Excel 的目的往往只有一个就是将这些数据导入到数据库中去。

数据库往往比较复杂,而且各种不同的数据库产品之间是不同的,这种区别无疑的增加了我们导入的困难。

从excel 文件来说,用户录入的数据往往并不能直接使用,要经过逻辑处理或者出错的判断,或者默认的改正等。

如果能够使用java 来直接读取excel 文件,无疑会使我们能够较从容的解决这些问题。

3.其他的方法将数据从excel 文件中读出来还有一个方法,就是使用odbc。

然后再用jdbc- odbc 桥来将数据从excel 文件中读出到java 中来,不过这种方法必须配odbc,针对excle 文件配odbc 是一件很麻烦的事情,而且难以操控,因此这只能是一种暂时的解决方法。

4.POIPOI 是Apache 的Jakata 项目,POI 代表Poor Obfuscation Implementation,即不良模糊化实现。

POI 的目标就是提供一组Java API 来使得基于Microsoft OLE 2 Compound Document 格式的Microsoft Office 文件易于操作。

一些POI API 仅仅是为最常用的Microsoft Office 文件Word 和Excel 而开发的;而其他的API 则是用于通用的OLE 2 Compound Document 和属性文件。

java操作excel表格详解

java操作excel表格详解⽬录使⽤场景什么是easyExcel写⼊表格1、引⼊依赖2、先创建与表对应的实体类3、⽣成表格读取表格1、实体类同上。

3、测试总结使⽤场景1、将⽤户信息导出为excel表格(导出数据....)2、将Excel表中的信息录⼊到⽹站数据库(习题上传....)⼤⼤减轻⽹站录⼊量!开发中经常会设计到excel的处理,如导出Excel,导⼊Excel到数据库中!操作Excel⽬前⽐较流⾏的就是Apache POI和阿⾥巴巴的easyExcel !这⾥我们主要使⽤easyExcel进⾏操作什么是easyExcelEasyExcel是⼀个基于Java的简单、省内存的读写Excel的开源项⽬。

在尽可能节约内存的情况下⽀持读写百M的Excel。

官⽹:⼀个excel表格由⼯作簿、⼯作表、⾏、列组成写⼊表格1、引⼊依赖<!-- easyexcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.0-beta2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.54</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><!--⽇期格式化⼯具--><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.10</version></dependency><!--test--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency>2、先创建与表对应的实体类@Datapublic class DemoData {@ExcelProperty("字符串标题")private String string;@ExcelProperty("⽇期标题")private Date date;@ExcelProperty("数字标题")private Double doubleData;/*** 忽略这个字段*/@ExcelIgnoreprivate String ignore;}3、⽣成表格private List<DemoData> data() {List<DemoData> list = new ArrayList<DemoData>();for (int i = 0; i < 10; i++) {DemoData data = new DemoData();data.setString("字符串" + i);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;}//根据list 写⼊excel@Testpublic void simpleWrite() {String path = "D:\\qdSystem\\Resources\\下载\\";// 写法1String fileName = path + "qiadnu.xlsx";// 这⾥需要指定写⽤哪个class去写,然后写到第⼀个sheet,名字为模板然后⽂件流会⾃动关闭EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());}读取表格1、实体类同上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

正文相关文章:∙Java操作Excel之理解JXL--读取Excel模板动态写入数据并生成Excel∙Java操作Excel之理解JXL--读取Excel∙Java解析Excel文件推荐圈子: GT-Grid更多相关推荐下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码:jxl是一个*国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。

其中功能相对POI比较弱一点。

但jExcelAPI对中文支持非常好,API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。

另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

使用如下:搭建环境将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。

基本操作一、创建文件拟生成一个名为“test.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:package test;// 生成Excel的类import java.io.File;import jxl.Workbook;import bel;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class CreateExcel {public static void main(String args[]) {try {// 打开文件WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));// 生成名为“第一页”的工作表,参数0表示这是第一页WritableSheet sheet = book.createSheet( " 第一页 " , 0 );// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)// 以及单元格内容为testLabel label = new Label( 0 , 0 , " test " );// 将定义好的单元格添加到工作表中sheet.addCell(label);/**/ /** 生成一个保存数字的单元格必须使用Number的完整包路径,否则有语法歧义单元格位置是第二列,第一行,值为789.123*/jxl.write.Number number = new jxl.write.Number( 1 , 0 , 555.12541 );sheet.addCell(number);// 写入数据并关闭文件book.write();book.close();} catch (Exception e) {System.out.println(e);}}}编译执行后,会产生一个Excel文件。

三、读取文件以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下: package test;// 读取Excel的类import java.io.File;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;public class ReadExcel {public static void main(String args[]) {try {Workbook book = Workbook.getWorkbook( new File( " test.xls " ));// 获得第一个工作表对象Sheet sheet = book.getSheet( 0 );// 得到第一列第一行的单元格Cell cell1 = sheet.getCell( 0 , 0 );String result = cell1.getContents();System.out.println(result);book.close();} catch (Exception e) {System.out.println(e);}}}程序执行结果:test四、修改文件利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。

下面的例子是在我们已经生成的Excel文件中添加一个工作表:package test;import java.io.File;import jxl.Workbook;import bel;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class UpdateExcel {public static void main(String args[]) {try {// Excel获得文件Workbook wb = Workbook.getWorkbook( new File( " test.xls " ));// 打开一个文件的副本,并且指定数据写回到原文件WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ),wb);// 添加一个工作表WritableSheet sheet = book.createSheet( " 第二页 " , 1 );sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据" ));book.write();book.close();} catch (Exception e) {System.out.println(e);}}}其他操作一、数据格式化在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。

1、字串格式化字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。

假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:WritableFont font1 =new WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ①WritableCellFormat format1 = new WritableCellFormat(font1); ②Label label = new Label( 0 , 0 ,”data 4 test”,format1) ③其中①指定了字串格式:字体为TIMES,字号16,加粗显示。

WritableFont 有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。

②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。

③处使用了Label类的构造子,指定了字串被赋予那种格式。

在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:// 把水平对齐方式指定为居中format1.setAlignment(jxl.format.Alignment.CENTRE);// 把垂直对齐方式指定为居中format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);二、单元格操作Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。

这些操作相对比较简单,下面只介绍一下相关的API。

1、合并单元格WritableSheet.mergeCells( int m, int n, int p, int q);// 作用是从(m,n)到(p,q)的单元格全部合并,比如:WritableSheet sheet = book.createSheet(“第一页”, 0 );// 合并第一列第一行到第六列第一行的所有单元格sheet.mergeCells( 0 , 0 , 5 , 0 );合并既可以是横向的,也可以是纵向的。

合并后的单元格不能再次进行合并,否则会触发异常。

2、行高和列宽WritableSheet.setRowView( int i, int height);// 作用是指定第i+1行的高度,比如:// 将第一行的高度设为200sheet.setRowView( 0 , 200 );WritableSheet.setColumnView( int i, int width);// 作用是指定第i+1列的宽度,比如:// 将第一列的宽度设为30sheet.setColumnView( 0 , 30 );jExcelAPI还有其他的一些功能,比如插入图片等,这里就不再一一介绍,读者可以自己探索。

其中:如果读一个excel,需要知道它有多少行和多少列,如下操作:Workbook book = Workbook.getWorkbook( new File( " 测试 1.xls " )); // 获得第一个工作表对象Sheet sheet = book.getSheet( 0 );// 得到第一列第一行的单元格int columnum = sheet.getColumns(); // 得到列数int rownum = sheet.getRows(); // 得到行数System.out.println(columnum);System.out.println(rownum);for ( int i = 0 ; i < rownum; i ++ ) // 循环进行读写 {for ( int j = 0 ; j < columnum; j ++ ) {Cell cell1 = sheet.getCell(j, i);String result = cell1.getContents();System.out.print(result);System.out.print( " \t " );}System.out.println();}book.close();ExcelBean.java文件用于生成Excelpublic class ExcelBean {public String expordExcel(OutputStream os, List courseList,List studentList)throws Exception {WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件String tmptitle = "课程“"+((Course_info)courseList.get(0)).getCource_name()+"”的选课学生列表"; // 标题WritableSheet wsheet = wbook.createSheet("第一页", 0); // sheet名称// 设置excel标题WritableFont wfont = new WritableFont(WritableFont.ARIAL, 16,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK);WritableCellFormat wcfFC = new WritableCellFormat(wfont);wsheet.addCell(new Label(1, 0, tmptitle, wcfFC));wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 14,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK);wcfFC = new WritableCellFormat(wfont);// 开始生成主体内容wsheet.addCell(new Label(0, 2, "课程名称"));wsheet.addCell(new Label(1, 2, "学号"));.........for(int i=3;i<studentList.size()+3;i++){wsheet.addCell(new Label(0, i,((Course_info)courseList.get(0)).getCource_name()));wsheet.addCell(new Label(1, i,((Student_info)studentList.get(0)).getStudentID()));...........}// 主体内容生成结束wbook.write(); // 写入文件wbook.close();os.close();return "success";}}控制器:public class EExcelDownController extends AbstractController {private ICourse_infoManage courseManage;public void setCourseManage(ICourse_infoManage courseManage) {this.courseManage = courseManage;}@Overrideprotected ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response) throws Exception {Integer course_id=newInteger(request.getParameter("course_id"));List courseList=this.courseManage.getCourseById(course_id); List studentList =this.courseManage.getStudentByCourseId(course_id);try {OutputStream os = response.getOutputStream();// 取得输出流response.reset();// 清空输出流response.setHeader("Content-disposition", "attachment; filename=student.xls");// 设定输出文件头response.setContentType("application/msexcel");// 定义输出类型ExcelBean excelBean = new ExcelBean();excelBean.expordExcel(os,courseList,studentList);// 调用生成excel文件bean} catch (Exception e) {System.out.println(e);}return null;}}回帖地址10请登录后投票发表时间:2006-10-09将Excel文件内容写入到数据库public class EStudentInsertExcelController extends SimpleFormController {private IStudent_infoManage studentManage;@Overrideprotected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {Student_info student_info = (Student_info) command;try {MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;MultipartFile file = multipartRequest.getFile( " Excelfile " ); // 获得文件:File toFile = new File( " c:\\学生信息临时文件.xls " ); // 产生文件名和空文件file.transferTo(toFile); // 文件上传Workbook book = Workbook.getWorkbook(toFile); // 得到工作薄Sheet sheet = book.getSheet( 0 ); // 获得第一个工作表对象int row = sheet.getRows(); // /得到该sheet的行数int column = sheet.getColumns(); // 得到该sheet的列数System.out.println( " 数据行数= " + row);System.out.println( " 数据列数= " + column);for ( int i = 1 ;i < row;i ++ ){for ( int j = 0 ;j < column;j ++ ){System.out.println( " j= " + j);sheet.getCell(j, i).getContents(); // 得到第j列第i行的单元格的类容student_info.setStudentID(sheet.getCell(j,i).getContents());........................}if ( this .studentManage.getStudentByStudentID(student_info.getStudentID()).size() != 0 )return new ModelAndView( " education/e-studentInfoAddError " );this .studentManage.insertStudent_info(student_info); }book.close();return new ModelAndView( " education/e-studentInfoAddExcelSuccess " , " row " , new Integer(row - 1 ));} catch (Exception e) {e.printStackTrace();}return new ModelAndView( " education/e-studentInfoAddExcelError " );}public void setStudentManage(IStudent_infoManage studentManage) {this .studentManage = studentManage;}}回帖地址00请登录后投票发表时间:2006-10-09spring 生成Excel和PDF文件HTML页面并不总是向用户显示数据输出的最好方式,有时候需要生成不可改变的文件打印,PDF可能是种不错的选择。

相关文档
最新文档