1. poi大量数据导出excel
合并单元格换行方式跟普通单元格的换行方式一样,有两种方式,一个是设置自动换行,一个是设置强制换行,下面分别介绍。
1、自动换行。
选中合并单元格,右键设置单元格格式,在对齐命令中,选中自动换行。这样改变合并单元格的列宽,数据就跟随列宽的大小自动换行。
2、强制换行。
选中合并单元格,将光标放在需要换行的位置,按下alt+enter键,强制换行。强制换行的数据,不会因单元格列宽的大小而改变。
2. POI导出
利用poi操作excel。同一个workbook 中创建的 cellstyle 不能超过4000 。估计你是遍历单元格创建生成的吧?可考虑创建map集合缓存必要cellstyle格式。已存在格式直接设置使用,不存在的再创建。一般情况下,一个workbook中使用到的cellstyle格式不会超过500!
3. poi大量数据导出
首先要导入spring相关包,poi,和fileupload包,我是使用maven构建的。萊垍頭條
一.导入excel萊垍頭條
(1)使用spring上传文件萊垍頭條
a.前台页面提交萊垍頭條
<form name="excelImportForm" action="${pageContext.request.contextPath}/brand/importBrandSort" method="post" onsubmit="return checkImportPath();" enctype="multipart/form-data" id="excelImportForm">萊垍頭條
<input type="hidden" name="ids" id="ids">頭條萊垍
<div >萊垍頭條
<div >萊垍頭條
<label ><input id="excel_file" type="file" name="filename" accept="xls"/></label>垍頭條萊
<div >萊垍頭條
<input id="excel_button" type="submit" value="导入Excel"/>萊垍頭條
</div>頭條萊垍
</div>萊垍頭條
</div>萊垍頭條
<div >萊垍頭條
<button type="button" data-dismiss="modal" onClick="uncheckBoxes();">取消</button>條萊垍頭
</div>萊垍頭條
b.后台spring的controller进行相关操作,这里主要讲的是使用spring上传文件,和读取文件信息。萊垍頭條
使用spring上传文件之前,需要配置bean。萊垍頭條
<bean id="multipartResolver" ></bean>@RequestMapping(value = "/importBrandSort", method = RequestMethod.POST)萊垍頭條
public ModelAndView importBrandSort(@RequestParam("filename") MultipartFile file,萊垍頭條
HttpServletRequest request,HttpServletResponse response) throws Exception {萊垍頭條
String temp = request.getSession().getServletContext()萊垍頭條
.getRealPath(File.separator)頭條萊垍
+ "temp"; // 临时目录萊垍頭條
File tempFile = new File(temp);萊垍頭條
if (!tempFile.exists()) {萊垍頭條
tempFile.mkdirs();條萊垍頭
}萊垍頭條
DiskFileUpload fu = new DiskFileUpload();垍頭條萊
fu.setSizeMax(10 * 1024 * 1024); // 设置允许用户上传文件大小,单位:位萊垍頭條
fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:位垍頭條萊
fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录萊垍頭條
// 开始读取上传信息萊垍頭條
//萊垍頭條
int index = 0;萊垍頭條
/* List fileItems = null;萊垍頭條
try {萊垍頭條
fileItems = fu.parseRequest(request);萊垍頭條
}萊垍頭條
catch (Exception e) {萊垍頭條
e.printStackTrace();垍頭條萊
}萊垍頭條
Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件垍頭條萊
FileItem fileItem = null;萊垍頭條
while (iter.hasNext()) {萊垍頭條
FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息萊垍頭條
if (!item.isFormField()) {萊垍頭條
fileItem = item;萊垍頭條
// index++;頭條萊垍
}垍頭條萊
}垍頭條萊
if (fileItem == null)垍頭條萊
return null;萊垍頭條
*/萊垍頭條
if (file == null)萊垍頭條
return null;萊垍頭條
logger.info(file.getOriginalFilename());萊垍頭條
String name = file.getOriginalFilename();// 获取上传文件名,包括路径萊垍頭條
//name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名萊垍頭條
long size = file.getSize();萊垍頭條
if ((name == null || name.equals("")) && size == 0)頭條萊垍
return null;萊垍頭條
InputStream in = file.getInputStream();條萊垍頭
List<BrandMobileInfoEntity> BrandMobileInfos = brandService萊垍頭條
.importBrandPeriodSort(in);垍頭條萊
// 改为人工刷新缓存KeyContextManager.clearPeriodCacheData(new條萊垍頭
// PeriodDimensions());// 清理所有缓存條萊垍頭
int count = BrandMobileInfos.size();頭條萊垍
String strAlertMsg ="";萊垍頭條
if(count!=0){萊垍頭條
strAlertMsg= "成功导入" + count + "条!";條萊垍頭
}else {頭條萊垍
strAlertMsg = "导入失败!";萊垍頭條
}垍頭條萊
logger.info(strAlertMsg);萊垍頭條
//request.setAttribute("brandPeriodSortList", BrandMobileInfos);頭條萊垍
//request.setAttribute("strAlertMsg", strAlertMsg);頭條萊垍
request.getSession().setAttribute("msg",strAlertMsg);萊垍頭條
return get(request, response);萊垍頭條
//return null;萊垍頭條
}萊垍頭條
代码中的注释部分是如果不使用spring的方式,如何拿到提交过来的文件名(需要是要apache的一些工具包),其实使用spring的也是一样,只是已经做好了封装,方便我们写代码。萊垍頭條
代码中的后半部分是读取完上传文文件的信息和对数据库进行更新之后,输出到前台页面的信息。垍頭條萊
上述代码中: InputStream in = file.getInputStream();條萊垍頭
List<BrandMobileInfoEntity> BrandMobileInfos = brandService萊垍頭條
.importBrandPeriodSort(in);读取excel的信息。萊垍頭條
(2)使用poi读取excel萊垍頭條
a.更新数据库萊垍頭條
@Override萊垍頭條
public List<BrandMobileInfoEntity> importBrandPeriodSort(InputStream in) throws Exception {萊垍頭條
List<BrandMobileInfoEntity> brandMobileInfos = readBrandPeriodSorXls(in);垍頭條萊
for (BrandMobileInfoEntity brandMobileInfo : brandMobileInfos) {萊垍頭條
mapper.updateByConditions(brandMobileInfo);垍頭條萊
}萊垍頭條
return brandMobileInfos;條萊垍頭
}萊垍頭條
这部分是sevice层的代码,用于读取excel信息之后更新数据库数据,我这里是使用mybatis。定义一个类BrandMobileInfoEntity,用与保存excel表每一行的信息,而List< BrandMobileInfoEntity > 则保存了全部信息,利用这些信息对数据库进行更新。頭條萊垍
b.读取excel信息萊垍頭條
private List<BrandMobileInfoEntity> readBrandPeriodSorXls(InputStream is)萊垍頭條
throws IOException, ParseException {萊垍頭條
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);條萊垍頭
List<BrandMobileInfoEntity> brandMobileInfos = new ArrayList<BrandMobileInfoEntity>();頭條萊垍
BrandMobileInfoEntity brandMobileInfo;萊垍頭條
// 循环工作表Sheet條萊垍頭
for (int numSheet = 0;萊垍頭條
numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {頭條萊垍
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);垍頭條萊
if (hssfSheet == null) {萊垍頭條
continue;萊垍頭條
}萊垍頭條
// 循环行Row垍頭條萊
for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {萊垍頭條
brandMobileInfo = new BrandMobileInfoEntity();萊垍頭條
HSSFRow hssfRow = hssfSheet.getRow(rowNum);條萊垍頭
for (int i = 0; i < hssfRow.getLastCellNum(); i++) {萊垍頭條
HSSFCell brandIdHSSFCell = hssfRow.getCell(i);頭條萊垍
if (i == 0) {萊垍頭條
brandMobileInfo.setBrandId(Integer萊垍頭條
.parseInt(getCellValue(brandIdHSSFCell)));萊垍頭條
} else if (i == 1) {萊垍頭條
continue;頭條萊垍
} else if (i == 2) {萊垍頭條
brandMobileInfo.setMobileShowFrom(Integer.parseInt(getCellValue(brandIdHSSFCell)));萊垍頭條
} else if (i == 3) {萊垍頭條
brandMobileInfo.setMobileShowTo(Integer.parseInt(getCellValue(brandIdHSSFCell)));萊垍頭條
} else if (i == 4) {條萊垍頭
brandMobileInfo.setSellMarkValue(getCellValue(brandIdHSSFCell));條萊垍頭
} else if (i == 5) {萊垍頭條
brandMobileInfo.setWarehouse(getCellValue(brandIdHSSFCell));條萊垍頭
} else if (i ==萊垍頭條
4. poi百万级数据导出
poipiku暂时是可以正常查看的网站,要是哪天不能正常查看了,我们会换地方的。
poipiku保存原图,可以用以下的方法步骤操作:
1.在复制粘贴网址的时候没删除多余的汉字,或者多删了网址中的字符【解决办法:仔细检查】
2.某些“安全浏览器”受害者【解决办法:推荐safari和chrome浏览器】
5. poi大文件导出
先说结论:没有什么合适的方案。條萊垍頭
附两个替代方案供参考。萊垍頭條
方案一:條萊垍頭
放弃 Freemarker 方案,使用 POI 项目进行代码写 Word,这样生成的docx文件是支持查看的。不过国产的 WPS 依然有兼容性问题。萊垍頭條
Apache POI - the Java API for Microsoft Documents萊垍頭條
方案二:萊垍頭條
加入 WPS 或者 微软,让他们移动端的App 也兼容OOXML 格式的文档垍頭條萊
Freemarker 生成的 Word 文件的主要原理是:萊垍頭條
通过手动创建的 flt 模板 生成 OOXML(Open Office XML) 格式的文件,命名为 doc 或 docx ,即可使用 Word 打开。萊垍頭條
这类文件在PC 上 MS-Word 和 WPS 以及 Open Office 和Liber Office 都是兼容的,是一种开源的 Office 文件格式。萊垍頭條
而目前的主流的 App :Google文档、WPS、Word 均不支持打开这个格式的 Word 文件。萊垍頭條
6. java poi导出
首先你要明白导入文件步骤:頭條萊垍
1.实例化excel读取对象萊垍頭條
2.加载excel文件頭條萊垍
全部加载萊垍頭條
选择加载萊垍頭條
3.读取excel文件條萊垍頭
全部读取 萊垍頭條
逐行读取頭條萊垍
以下你看看那个更加适应你萊垍頭條
顺便列出几个其他语言导入Excel文件,希望对你有帮助萊垍頭條
PHP导入Excel文件萊垍頭條
java把Excel文件数据导入数据库垍頭條萊
PHP实现导出Excel文件通用方法萊垍頭條
JXL生成的excel文件+JAVA文件下载功能萊垍頭條
Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载萊垍頭條
java处理Excel文件---excel文件的创建,删除,写入,读取萊垍頭條
Java读取Excel文件條萊垍頭
jxl解析Excel文件垍頭條萊
JXL操作Excel文件萊垍頭條
java POI读取Excel文件萊垍頭條
java使用poi读取excel文件代码示例萊垍頭條
用jxl生成Excel文件萊垍頭條
PHP验证码文件类萊垍頭條
PHP 下载远程文件萊垍頭條
PHP获取远程文件的大小萊垍頭條
php压缩CSS文件萊垍頭條
PHP强制下载文件萊垍頭條
php读取csv文件类萊垍頭條
php 简单ftp文件上传范例條萊垍頭
一个php 生成zip文件的类萊垍頭條
7. poi导出文件
首先你要明白导入文件步骤:
1.实例化excel读取对象2.加载excel文件全部加载选择加载3.读取excel文件全部读取 逐行读取以下你看看那个更加适应你顺便列出几个其他语言导入Excel文件,希望对你有帮助PHP导入Excel文件java把Excel文件数据导入数据库PHP实现导出Excel文件通用方法JXL生成的excel文件+JAVA文件下载功能Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载java处理Excel文件---excel文件的创建,删除,写入,读取Java读取Excel文件jxl解析Excel文件JXL操作Excel文件java POI读取Excel文件java使用poi读取excel文件代码示例用jxl生成Excel文件PHP验证码文件类PHP 下载远程文件PHP获取远程文件的大小php压缩CSS文件PHP强制下载文件php读取csv文件类php 简单ftp文件上传范例一个php 生成zip文件的类
8. poi快速导出数据量过大问题
通过POI的使用获取到要导出的Excel工作簿,将其写入输出流。
然后输出流内容会随响应信息传导浏览器前端,弹出保存窗口,选择你要保存的位置。
- 相关评论
- 我要评论
-