JAVA怎么向Excel中写入批量数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA怎么向Excel中写入批量数据?相关的知识,希望对你有一定的参考价值。

参考技术A public static void drawExcel(HSSFWorkbook wb, String sheetName, String title, int n, List exlList, int[] index)\\x0d\\x0aList exList =(List)exlList;\\x0d\\x0aint len = exList.get(0).length;\\x0d\\x0a// 创建一个sheet表单\\x0d\\x0aHSSFSheet sheet = wb.createSheet(sheetName);\\x0d\\x0aRegion region = null;\\x0d\\x0a//样式\\x0d\\x0aHSSFCellStyle cellStyle1 = setStyleBorder(wb);\\x0d\\x0aHSSFCellStyle cellStyle2 = setStyleFontBorder(wb);\\x0d\\x0a// 创建标题行\\x0d\\x0aHSSFRow row = sheet.createRow(0);\\x0d\\x0arow.setHeight((short)500);\\x0d\\x0a// 创建单元格\\x0d\\x0aHSSFCell cell = null;\\x0d\\x0aif(title != null && !"".equals(title))\\x0d\\x0aregion = new Region(0, (short)0, 0, (short)(len- 1));\\x0d\\x0asheet.addMergedRegion(region);\\x0d\\x0a\\x0d\\x0acell = row.createCell(0);\\x0d\\x0a// 标题写入单元格\\x0d\\x0acell.setCellValue(title);\\x0d\\x0a cell.setCellStyle(setStyleFontSize(wb, 18));\\x0d\\x0aelse\\x0d\\x0an = n - 1;\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a NumberFormat formatter = NumberFormat.getNumberInstance();\\x0d\\x0a formatter.setMaximumFractionDigits(8);\\x0d\\x0a//合计信息\\x0d\\x0aDouble[] sum = new Double[len];\\x0d\\x0aObject[] s = null;\\x0d\\x0afor(int i = 0; i < exList.size(); i++)\\x0d\\x0as = exList.get(i);\\x0d\\x0arow = sheet.createRow(i + n);\\x0d\\x0a// 创建数据行\\x0d\\x0afor(int j = 0; j < s.length; j++)\\x0d\\x0acell = row.createCell(j);\\x0d\\x0a/***\\x0d\\x0a* jobin create\\x0d\\x0a*/\\x0d\\x0aif(s[j] instanceof Integer || s[j] instanceof Float)\\x0d\\x0acell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);\\x0d\\x0aelse\\x0d\\x0acell.setCellType(HSSFCell.CELL_TYPE_STRING);\\x0d\\x0a\\x0d\\x0aif(!StringUtils.isNotEmpty(s[j]))\\x0d\\x0acell.setCellStyle(cellStyle1);\\x0d\\x0acontinue;\\x0d\\x0a\\x0d\\x0aString[] rs = null;\\x0d\\x0aint l = 3000;\\x0d\\x0aif(i == 0 && s[j].toString().indexOf(",") > 0)\\x0d\\x0ars = s[j].toString().split(",");\\x0d\\x0acell.setCellValue(rs[0]);\\x0d\\x0al = Integer.parseInt(rs[1]);\\x0d\\x0aelse\\x0d\\x0acell.setCellValue(s[j].toString());\\x0d\\x0a\\x0d\\x0aif(i == 0)\\x0d\\x0acell.setCellStyle(cellStyle2);\\x0d\\x0a//设置列宽\\x0d\\x0a//if(j == 0)\\x0d\\x0a sheet.setColumnWidth(j, l);\\x0d\\x0a//else if(j == s.length -1)\\x0d\\x0a// sheet.setColumnWidth(j, 5000);\\x0d\\x0a//else\\x0d\\x0a// sheet.setColumnWidth(j, 3000);\\x0d\\x0a//\\x0d\\x0aelse\\x0d\\x0acell.setCellStyle(cellStyle1);\\x0d\\x0a//合计统计\\x0d\\x0aif(index != null)\\x0d\\x0afor(int in : index)\\x0d\\x0aif(in == j)\\x0d\\x0aif(sum[in] == null) sum[in] = 0.0;\\x0d\\x0asum[in] += Double.parseDouble(s[j].toString());\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a//合计信息\\x0d\\x0aif(index != null)\\x0d\\x0aregion = new Region(exList.size() + 1, (short)0, exList.size() + 1, (short)(index[0]-1));\\x0d\\x0asheet.addMergedRegion(region);\\x0d\\x0arow = sheet.createRow(exList.size() + n);\\x0d\\x0afor(int i = 0; i < sum.length; i++)\\x0d\\x0acell = row.createCell(i);\\x0d\\x0acell.setCellStyle(cellStyle2);\\x0d\\x0aif(i == 0)\\x0d\\x0acell.setCellValue("合计");\\x0d\\x0aelse if(sum[i] != null)\\x0d\\x0acell.setCellValue(formatter.format(sum[i]).replace(",", ""));\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a核心代码,我项目上使用的

如何用java向指定的EXCEL单元格中写入数据?

我从外部上传了一个excel表,想直接改变某个单元格的内容,要怎么写代码?不需要重新创建excel表。希望大家帮帮忙,先谢谢了。

我们项目里用的 供你参考,没写全,你可以自己百度下

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
* 导出excel
* @param reportParams 导出excel列名标示
* @param list导出excel值
* @param headersexcel头
* @param reportName·excel的sheet名
* @param response
* @param startRow从哪一行开始放list值
* @param startCol 从哪一列开始放list值
* @return
*/
public boolean report(ReportBean rb, List list, XlsHeaderBean[] headers, String reportName, HttpServletResponse response, int startRow, int startCol, HttpServletRequest request)
WritableWorkbook wwb = null;
OutputStream os;
boolean flag = true;
Date date = new Date();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String strDate = format.format(date);
try
// 用Workbook类的工厂方法创建工作薄(Workbook)对象
response.setContentType("application/x-msdownload");
String sheetName = "report";
sheetName = sheetName.replaceAll(":", "").replaceAll("[)]", "")
.replaceAll("[(]", "");
// 这里解释一下
// attachment; 这个代表要下载的,如果去掉就编程直接打开了
// filename是文件名,另存为或者下载时,为默认的文件名
response.addHeader("Content-Disposition", "attachment; filename="
+ new String(sheetName.getBytes("UTF-8"), "ISO-8859-1")+ strDate
+ ".xls");
os = response.getOutputStream();
wwb = Workbook.createWorkbook(os);
catch (IOException e)
e.printStackTrace();
return flag = false;

if (wwb != null)
// 创建一个可写入的工作表
// Workbook的createSheet方法两个参数,1名称,2位置
WritableSheet ws = wwb.createSheet(reportName, 0);
// 下面开始添加单元格
// 导出excel
try
Label labelC = null;
for(int j = 0; j < headers.length; j++)
if(headers[j].isUnion())
ws.mergeCells(headers[j].getCol(), headers[j].getRow(), headers[j].getCol()+headers[j].getColLength(), headers[j].getRow()+headers[j].getRowLength());

labelC = new Label(headers[j].getCol(), headers[j].getRow(), headers[j].getValue());
ws.addCell(labelC);

catch (RowsExceededException e)
e.printStackTrace();
catch (WriteException e)
e.printStackTrace();

String value = null;
for (int i = 0; i < list.size(); i++)
Map values = (Map)list.get(i);
for (int j = 0; j < rb.getReportParams().length; j++)
// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC;
if(values.get(rb.getReportParams()[j]) == null)
value = "";
else
if(values.get(rb.getReportParams()[j]) instanceof java.util.Date)
value = format.format(values.get(rb.getReportParams()[j]));
else if(values.get(rb.getReportParams()[j]) instanceof java.math.BigDecimal)
value = values.get(rb.getReportParams()[j]).toString();
else
value = values.get(rb.getReportParams()[j]).toString();


labelC = new Label(j+startCol, i + startRow, value);
try
// 将生成的单元格添加到工作表中
ws.addCell(labelC);
catch (RowsExceededException e)
e.printStackTrace();
return flag = false;
catch (WriteException e)
e.printStackTrace();
return flag = false;



if(rb.isHasImg())
String rootPath = this.getServletContext().getRealPath("savefiles");
String imgPath = rb.getImgPath();
if(rootPath != null && rootPath.compareTo("") != 0 && imgPath != null && imgPath.compareTo("") !=0)
String[] strs = imgPath.split("\\/");
String imgName = strs[strs.length-1];
File file = new File(rootPath + File.separator + imgName);
if(file.exists())
WritableImage wi = new WritableImage(0, startRow + list.size() + 2,12,20, file);
ws.addImage(wi);



try
// 从内存中写入文件中
wwb.write();
wwb.close();
return flag;
catch (IOException e)
e.printStackTrace();
return flag = false;
catch (WriteException e)
e.printStackTrace();
return flag = false;


return flag;
参考技术A 1.java操作excel的第三方开源包很多,比如poi,javaExcel,OpenXls等;
2.你可以下载上述的某个包,然后直接看它的API就ok了,直接改变单元格内容是最基础的方法,很容易的。

希望对你有所帮助~~追问

你能不能给我个具体的例子,谢谢了!

追答

你给我个邮箱,我给你发个例子过去~~

追问

发到我的qq邮箱吧,谢谢了。594788036@qq.com

追答

已发送,请查收!

本回答被提问者采纳

以上是关于JAVA怎么向Excel中写入批量数据?的主要内容,如果未能解决你的问题,请参考以下文章

java中怎么把数据写入excel

从Excel向MATLAB中导入数据出现了nan怎么处理

从excel表格读取数据用Java代码实现批量上传写入数据库

java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决

批量向MySQL导入1000万条数据的优化

如何用java向指定的EXCEL单元格中写入数据?