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

JAVA怎么向Excel中写入批量数据?,第1张

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\x0a}else{\x0d\x0an = n - 1\x0d\x0a}\x0d\x0a\x0d\x0aNumberFormat formatter = NumberFormat.getNumberInstance()\x0d\x0aformatter.setMaximumFractionDigits(8)\x0d\x0a//合计信息\x0d\x0aDouble[] sum = new Double[len]\x0d\x0aObject[] s = null\x0d\x0afor(int i = 0i s = exList.get(i)\x0d\x0arow = sheet.createRow(i + n)\x0d\x0a// 创建数据行\x0d\x0afor(int j = 0j cell = 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\x0a}else{\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\x0a}else{\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\x0a}else{\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 = 0i cell = row.createCell(i)\x0d\x0acell.setCellStyle(cellStyle2)\x0d\x0aif(i == 0){\x0d\x0acell.setCellValue("合计")\x0d\x0a}else if(sum[i] != null){\x0d\x0acell.setCellValue(formatter.format(sum[i]).replace(",", ""))\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a核心代码,我项目上使用的

两种方案:1.可以对数据库中的这张表进行本地缓存处理,验证时调用缓存进行匹配验证。2.用程序生成需要导入excel的数据模板,在模板里将要验证的这一列做成下拉框。此模板条件下的excel数据文件批量导入时即不用校验。具体采用哪种视你的应

你知道poi和jdbc吗?用这两个就可以了。再建立一个Bean用作数据传输。

        List<ListpageBean> beanList = new ArrayList<ListpageBean>()

        File file = new File("d:/test/test.xls")

InputStream is = new FileInputStream(file)

HSSFWorkbook workbook = new HSSFWorkbook(is)

HSSFSheet sheet = workbook.getSheetAt(0)

for (int rowNum = 0 rowNum <= sheet.getLastRowNum() rowNum++) {

ListpageBean bean = new ListpageBean()

HSSFRow row = sheet.getRow(rowNum)

siteId = (int) row.getCell(1).getNumericCellValue()

name = row.getCell(3).getStringCellValue()

url = row.getCell(4).getStringCellValue()

charset = row.getCell(5).getStringCellValue()

bean.setSiteId(siteId)

bean.setName(name)

bean.setUrl(url)

bean.setCharset(charset)

beanList.add(bean)

}

listpageService.addListpageBatch(beanList, ConfigUtil.getDataSourceArray()[0])

这是我之前写的一部分代码,当然不全面,因为有些部分是别人写的我只是调用了一些方法,仅供参考。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11953827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存