JAVA使用poi包,向Excel中写入批量数据
发布网友
发布时间:2022-04-19 19:47
我来回答
共1个回答
热心网友
时间:2023-07-09 01:35
public static void drawExcel(HSSFWorkbook wb, String sheetName, String title, int n, List<?> exlList, int[] index){
List<Object[]> exList =(List<Object[]>)exlList;
int len = exList.get(0).length;
// 创建一个sheet表单
HSSFSheet sheet = wb.createSheet(sheetName);
Region region = null;
//样式
HSSFCellStyle cellStyle1 = setStyleBorder(wb);
HSSFCellStyle cellStyle2 = setStyleFontBorder(wb);
// 创建标题行
HSSFRow row = sheet.createRow(0);
row.setHeight((short)500);
// 创建单元格
HSSFCell cell = null;
if(title != null && !"".equals(title)){
region = new Region(0, (short)0, 0, (short)(len- 1));
sheet.addMergedRegion(region);
cell = row.createCell(0);
// 标题写入单元格
cell.setCellValue(title);
cell.setCellStyle(setStyleFontSize(wb, 18));
}else{
n = n - 1;
}
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMaximumFractionDigits(8);
//合计信息
Double[] sum = new Double[len];
Object[] s = null;
for(int i = 0; i < exList.size(); i++){
s = exList.get(i);
row = sheet.createRow(i + n);
// 创建数据行
for(int j = 0; j < s.length; j++){
cell = row.createCell(j);
/***
* jobin create
*/
if(s[j] instanceof Integer || s[j] instanceof Float){
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
}else{
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
}
if(!StringUtils.isNotEmpty(s[j])){
cell.setCellStyle(cellStyle1);
continue;
}
String[] rs = null;
int l = 3000;
if(i == 0 && s[j].toString().indexOf(",") > 0){
rs = s[j].toString().split(",");
cell.setCellValue(rs[0]);
l = Integer.parseInt(rs[1]);
}else{
cell.setCellValue(s[j].toString());
}
if(i == 0){
cell.setCellStyle(cellStyle2);
//设置列宽
//if(j == 0){
sheet.setColumnWidth(j, l);
//}else if(j == s.length -1){
// sheet.setColumnWidth(j, 5000);
//}else{
// sheet.setColumnWidth(j, 3000);
//}
}else{
cell.setCellStyle(cellStyle1);
//合计统计
if(index != null){
for(int in : index){
if(in == j){
if(sum[in] == null) sum[in] = 0.0;
sum[in] += Double.parseDouble(s[j].toString());
}
}
}
}
}
}
//合计信息
if(index != null){
region = new Region(exList.size() + 1, (short)0, exList.size() + 1, (short)(index[0]-1));
sheet.addMergedRegion(region);
row = sheet.createRow(exList.size() + n);
for(int i = 0; i < sum.length; i++){
cell = row.createCell(i);
cell.setCellStyle(cellStyle2);
if(i == 0){
cell.setCellValue("合计");
}else if(sum[i] != null){
cell.setCellValue(formatter.format(sum[i]).replace(",", ""));
}
}
}
}
核心代码,我项目上使用的
java poi Excel大数据量导入怎么提高速度
POI3.8的SXSSF包是XSSF的一个扩展版本,支持流处理,在生成大数据量的电子表格且堆空间有限时使用。SXSSF通过限制内存中可访问的记录行数来实现其低内存利用,当达到限定值时,新一行数据的加入会引起老一行的数据刷新到硬盘。比如内存中限制行数为100,当行号到达101时,行号为0的记录刷新到硬盘并从内...
java多线程进行大批量excel数据导入实现方案?
方法一:使用JExcel API。此方法直接操作Excel文件,适合数据量不大且对性能要求不高的场景。在多线程导入时,可将数据分类分块,每个线程处理一块数据,提升导入效率。方法二:将Excel数据转换为CSV格式,再导入到目标平台。这种方法相对方法一在性能上有所提升,同时减少了对Java库的依赖。同样在多线程环...
用java的poi类读取一个excel表格的内容后再写入到一个新excel表格中的...
回答:干嘛还那么麻烦的用poi读数据 然后又全部写到新文件。直接用IO流实现文件的读写不就得啦。
java用poi往excel里写数据遇到换行问题
String[] arr = new String[] { "a", "b", "c", "d", "a", "b", "c", "d", "a", "b", "c", "d" };List<String> list = Arrays.asList(arr);if (list != null) { StringBuffer buff = new StringBuffer();int colIndex = 0;// 用来标识列下标 for (int i ...
java poi插入数据到已经存在的excel但不覆盖原来的数据 怎么实现 在线...
poi的Sheet对象可以获取最后一行位置,如int lastRowNum = sheet.getLastRowNum(); 知道最后一行位置,就可以在最后一行后面开始加入新数据,如Row row = sheet.getRow(lastRowNum+1);
java操作poi怎么更改excel中的数据
POI里可能没有这个机能。 不过你可以这样做。 把带有这个格式的Excel文件,做为模板。 每次把模板文件读进来,把自己要输出的数据填到对应的单元格里。 之后,把填完数据的Excel文件,保存到指定路径里。或者从浏览器里弹出。
您好我也遇到POI写入excel但是显示不出来问题。请问你怎么解决的_百度...
今天在使用POI将float类型数据写EXCEL入时候会出现写入的数值与实际数值不符的问题;例如我将数据4444.4443写入EXCEL中(已将数据精度设置为:df.getFormat("#,##0.0"))出现问题图及正常图详见下图。此问题在从数据库中读出记录写入EXCEL时出现,直接往EXCEL文件中写入数据时完全正常;在数据库读出记录...
Java开发中如何用POI优雅的导出Excel文件
实现步骤包括:1)定义注解,标注需要导出的字段及字段名称,以便生成表头。2)实体类设计,根据注解确定哪些字段需要导出到Excel。3)使用POI库操作Excel文件,通过HttpServletResponse或文件存储进行输出。具体实现中,将数据从集合中读取,根据注解生成表头,并填充到Excel的相应列中。最后,将Excel文件输出到...
poi如何可以讲50000条数据保存入excel中(A1:Z50000)
回答:excel只是个电子表而已,桌面应用,运行的时候会将所有数据读到内存中以加快执行速度。它处理不了这么多数据。你没法把它当数据库用。建议直接将数据输出为xml格式或者html的table格式,这样excel也可以打开。
java poi包处理数据,将数据导入到已经存在的excel中,为什么打开excel后...
已经得到了A3和A4的值 为什么还用excel的表达式来整,直接将结果填入A5不就可以了