POI导出Excel,打开没问题,直接导入解析不到数据,如果用Excel软件随便编辑一下导入可以解析到数据,导出大致如下
SXSSFWorkbook wb = dynamicTableService.getDTExcelBySql(sql, selectColumnList, showColumnMap);
OutputStream out = response.getOutputStream();
wb.write(out);
out.flush();
out.close();
/**
* 导出excel文件
*
* @param sql
* @param titleList
* 表格表头,将titleList 中的对像转为string
* @return
*/
@SuppressWarnings({ "unused", "unchecked" })
public SXSSFWorkbook getDTExcelBySql(String sql, List<DynamicTableValue> titleList, HashMap<Long, String> showColumnMap) {
long start = System.currentTimeMillis();
int pn = 1;
int totalCount = getCountBySql(sql);
int pageSize = Config.EXPORT_EXCEL_SIZE;// 一次查询条数据
int pageCount = 0;// 页数
if (totalCount % pageSize == 0) {
pageCount = totalCount / pageSize;
} else {
pageCount = totalCount / pageSize + 1;
}
List<Object[]> dataList = getPageBySQL(sql, pn, pageSize);
int currentRowNum = 0;
SXSSFWorkbook wb = new SXSSFWorkbook(500);// 设置内存中缓存记录数
Sheet sheet = wb.createSheet("sheet1");
CellStyle style = wb.createCellStyle();
style.setAlignment(XSSFCellStyle.ALIGN_LEFT); // 创建一个居中格式
if (titleList != null && titleList.size() > 0) {
Row row = sheet.getRow(currentRowNum) == null ? sheet.createRow(currentRowNum) : sheet.getRow(currentRowNum);
currentRowNum++;
CellStyle rowStyle = wb.createCellStyle();
rowStyle.setFillForegroundColor(HSSFColor.LIME.index);//背景颜色
// rowStyle.setFillBackgroundColor(HSSFColor.LIME.index);//
rowStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
rowStyle.setAlignment(CellStyle.ALIGN_CENTER);//居中
// rowStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
// rowStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
// rowStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
// rowStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
Font font = wb.createFont();
font.setFontName("宋体");//字体
font.setFontHeightInPoints((short) 12);//字体大小
rowStyle.setFont(font);
row.setRowStyle(rowStyle);
int excelColIndex = 0;// 记录真实的显示的列位置,因有字段不显示,所以不能用colIndex
for (int colIndex = 0; colIndex < titleList.size(); colIndex++) {
DynamicTableValue dtv = titleList.get(colIndex);
if (showColumnMap.get(dtv.getId()) != null || "true".equals(dtv.getPrimaryKey())) {
Cell cell = row.createCell(excelColIndex);
cell.setCellValue(dtv.getColumnNameCN());
cell.setCellStyle(rowStyle);
excelColIndex++;
}
}
}
CellStyle cellStyle = wb.createCellStyle();
Font font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 11);
cellStyle.setFont(font);
CellStyle rowStyle = wb.createCellStyle();
rowStyle.setFillForegroundColor(HSSFColor.LIME.index);
while (dataList != null && dataList.size() > 0) {
for (int i = 0; i < dataList.size(); i++) {
Row row = sheet.getRow(currentRowNum) == null ? sheet.createRow(currentRowNum) : sheet.getRow(currentRowNum);
currentRowNum++;
row.setRowStyle(rowStyle);
Object[] f = dataList.get(i);
int excelColIndex = 0;// 记录真实的显示的列位置,因有字段不显示,所以不能用colIndex
for (int colIndex = 0; colIndex < f.length; colIndex++) {
DynamicTableValue dtv = titleList.get(colIndex);
if (showColumnMap.get(dtv.getId()) != null || "true".equals(dtv.getPrimaryKey())) {
Cell cell = row.createCell(excelColIndex);
cell.setCellValue(f[colIndex] == null ? "" : f[colIndex].toString());
cell.setCellStyle(cellStyle);
excelColIndex++;
}
}
}
pn++;
dataList = getPageBySQL(sql, pn, pageSize);
}
long used = (System.currentTimeMillis() - start);
// System.out.println(used);
return wb;
}
问题补充:读取Excel方法:
public class XxlsPrint extends XxlsAbstract {
private static int totalCount=0;
@Override
public void optRows(int sheetIndex,int curRow, List<String> rowlist) throws SQLException {
for (int i = 0; i < rowlist.size(); i++) {
System.out.print("'" + rowlist.get(i) + "',");
}
System.out.println();
totalCount++;
}
public static void main(String[] args) throws Exception {
XxlsPrint howto = new XxlsPrint();
long start = System.currentTimeMillis();
// howto.processOneSheet("e:\\log.xlsx",1);
// howto.processOneSheet("e:\\dt_demo_20130522113626.xlsx",1);
// howto.process("e:\\dt_demo_20130522113626.xlsx");
howto.process("e:\\dt_demo_2.xlsx");
long used = (System.currentTimeMillis() - start);
System.out.println("文件中总数据条数:"+totalCount+",循环用时:"+used+" 注:不输出信息时所用时间");
// howto.processAllSheets("F:/new.xlsx");
}
}
/**
* 遍历 excel 文件
*/
public void process(String filename) throws Exception {
OPCPackage pkg = OPCPackage.open(filename);
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
XMLReader parser = fetchSheetParser(sst);
Iterator<InputStream> sheets = r.getSheetsData();
int counterIndex=0;
while (sheets.hasNext()) {
counterIndex++;
curRow = 0;
sheetIndex++;
InputStream sheet = sheets.next();
InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource);
sheet.close();
}
System.out.println(counterIndex);
pkg.close();
}
相关推荐
1. **导出Excel**:首先,使用MyBatis执行SQL查询获取数据,然后通过POI创建一个Workbook对象,代表Excel工作簿。接着,创建Sheet对象表示工作表,并在其中添加Row和Cell来填充数据。最后,将Workbook写入到本地文件...
在本项目中,"SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip",我们主要关注的是如何利用Java技术栈来处理Excel文件,并与数据库进行交互。以下是相关知识点的...
这个链接提供了一个详细的Java代码示例,演示了如何使用POI导出Excel。在实际开发中,你可以根据这个示例调整代码以满足自己的需求,比如添加更多的数据处理逻辑或自定义样式。记得在导入项目时,确保包含上述提到的...
在实际项目中,为了简化POI的使用,通常会封装一些工具类或者服务,提供简单的接口供其他模块调用,如批量导入数据到Excel、导出特定格式的报表等。同时,需要注意的是,处理大量数据时,由于内存占用问题,可能需要...
标题提到的"导出excel文档所需要的poi的jar包"正是指这个功能。 Apache POI的版本3.8是较早的一个稳定版本,尽管现在已经有更新的版本,但3.8版本仍然广泛使用。这里提到了三个核心的jar包: 1. poi-3.8.jar:这是...
《使用Easy-Poi进行Excel导入导出的实践详解》 在现代企业中,数据处理是一项不可或缺的任务,而Excel作为常见的数据存储和分析工具,其导入导出功能在各种业务场景中发挥着重要作用。Easy-Poi是一款优秀的Java库,...
这里我们将深入探讨“excel导入导出”的两种主要实现方式:纯前端解析和后端解析,以及如何在前后端之间进行数据传输。 首先,让我们了解纯前端解析的实现。这种方式通常依赖于JavaScript库,如Papa Parse或SheetJS...
Excel导入通常用于将用户上传的Excel文件中的数据读取到系统中。关键步骤如下: - 文件上传:使用Servlet或类似库处理用户上传的Excel文件,将其保存到服务器的某个位置。 - 读取文件:创建`Workbook`对象,传入...
总结起来,Apache POI 提供了强大的工具来处理 Excel 文件,无论是从数据库导出数据到 Excel,还是从 Excel 导入数据到应用程序。通过理解这些核心概念和方法,开发者可以灵活地构建功能丰富的 Excel 导入导出功能,...
本主题聚焦于如何利用Spring3 MVC框架结合Apache POI库来实现在Java环境中Excel与MySQL数据库之间的数据导入与导出。 Spring3 MVC是Spring框架的一个组件,专门用于构建Web应用程序,它提供了模型-视图-控制器(MVC...
此外,为了提高代码的可维护性和复用性,可以抽象出通用的Excel导入导出服务,封装读写Excel的核心逻辑,提供接口供其他业务调用。还可以设计一套模板规则,使得业务人员可以根据规则自行创建和修改模板,减轻开发...
"poi导出excel所需jar"这个标题表明我们正在讨论使用POI库来导出Excel文件时所需的依赖文件。下面将详细介绍这些jar包的功能及其在导出Excel过程中的作用。 1. **poi-ooxml-schemas-3.8-20120326.jar**:此jar包包...
在导入Excel数据到数据库时,我们通常会使用HSSF或XSSF来解析Excel文件的内容,然后通过Java的数据库连接(JDBC)将这些数据存储到数据库中。 1. **Excel文件读取**: 使用POI读取Excel文件的第一步是创建一个`...
在Java开发中,数据的导入导出功能是十分常见的需求,尤其在企业级应用中,与Excel文件的交互更是不可或缺的一部分。Apache POI是一个强大的库,它允许开发者使用Java读写Microsoft Office格式的文件,包括Excel(....
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。...通过理解其核心组件和API,你可以有效地操作Excel数据,进行数据分析、数据导入导出等各种任务。
为了在Java项目中使用Apache POI导出Excel,你需要将这些jar包添加到你的项目的类路径中。如果你使用的是Maven或Gradle,可以在pom.xml或build.gradle文件中声明相应的依赖。在实际编程中,你可以使用POI提供的API来...
在这个场景中,我们关注的是如何使用POI库来导入和导出Excel 2003及2007版本的数据。以下是对POI库以及相关jar包的详细解释: 1. **Apache POI**:这是由Apache软件基金会开发的一个Java库,它允许Java应用程序创建...
当你需要从网页数据导出Excel时,Easy POI提供了一种方便的方式。首先,你需要将HTML内容转换为表格数据结构,例如使用Jsoup解析HTML获取表格元素。然后,利用Easy POI的API,创建一个Excel工作簿对象,将HTML表格...
1. **Java表格数据导出Excel**: Java中的`Apache POI`库是一个广泛使用的工具,可以用来操作Microsoft Office的文件格式,包括Excel(XLS和XLSX)。在`Export.java`文件中,开发者可能使用了`HSSFWorkbook`(针对...