概述
在文本内容结构化抽取时,经常需要将抽取的结果写到excel文档中,这里针对新建excel文档和针对已经存在的excel追加内容的操作,进行记录。
一、Excel基本概念
Workbook:工作簿,代表一个Excel文件。Excel分为两种,后缀名为xls的HSSFWorkBook(2003版本及以前),和后缀名为xlsx的XSSFWorkBook(2007版本及以后)
Sheet:表格,一个Workbook中可以有多个表格。
Row:行(通过Sheet可以获取到某一行)
Cell:单元格(通过Row可以获取到某个单元格,单元格中存放数据)
二/引用依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>
String style = path.substring(path.lastIndexOf(".") + 1, path.length());
Workbook workbook;
File file = new File(path);
boolean flag=false;
if(file.exists()) {
flag = true;
FileInputStream fs = new FileInputStream(path);
if ("XLS".equals(style.toUpperCase())) {
// 使用POI提供的方法得到excel的信息
POIFSFileSystem ps = new POIFSFileSystem(fs);
workbook = new HSSFWorkbook(ps);
} else {
workbook = new XSSFWorkbook(fs);
}
}else {
if ("XLS".equals(style.toUpperCase())) {
workbook = new HSSFWorkbook();
} else {
workbook = new XSSFWorkbook();
}
}
//遍历输入的数据集
System.out.println(resultDataSets.length+" "+path);
for(int i=0;i<resultDataSets.length;++i) {
ResultDataSet resultDataSet=resultDataSets[i];
// 生成一个表格
System.out.println(i+" name="+resultDataSet.getTableName());
Sheet sheet = null;
if(!flag){
sheet = workbook.createSheet(resultDataSet.getTableName());
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 15);
}else {
sheet = workbook.getSheetAt(0);
}
//获取字段名称和字段值列表
ArrayList<ResultField> fields = (ArrayList<ResultField>) resultDataSet.getFields();
ArrayList<ResultRecord> records = (ArrayList<ResultRecord>) resultDataSet.getRecords();
//构建标题行
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("ID");
for(int j=0;j<fields.size();++j) {
ResultField field = fields.get(j);
cell = row.createCell(j+1);
cell.setCellValue(field.getFieldName());
}
int index = sheet.getLastRowNum();
//对于数据,依次写入数据的各个字段
for(int j=0;j<records.size();++j) {
ResultRecord record= records.get(j);
index++;
row = sheet.createRow(index);
cell=row.createCell(0);
cell.setCellValue(index);
for(int k=0;k<fields.size();++k) {
ResultField textField = fields.get(k);
cell = row.createCell(k + 1);
FieldType fieldType = textField.getFieldType();
switch (fieldType) {
//STRING, INT, FLOAT, DOUBLE, DATE
case STRING:
cell.setCellValue((String) record.getFieldValue(k));
break;
case FLOAT:
cell.setCellValue((float) record.getFieldValue(k));
break;
case INT:
cell.setCellValue((int) record.getFieldValue(k));
break;
case DOUBLE:
cell.setCellValue((double)record.getFieldValue(k));
break;
default:
break;
}
}
}
}
file = new File(path);
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
workbook.write(outputStream);
outputStream.flush();
} catch (Exception e) {
throw e;
} finally {
try {
if (null != outputStream) {
outputStream.close();
}
} catch (Exception e) {
throw e;
}
}
最后
以上就是标致小馒头为你收集整理的java 写excel文件的全部内容,希望文章能够帮你解决java 写excel文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复