1. poi分批导出
导出时自由选择路径的代码如下:
1、后台输出Excel文件代码:
OutputStream output = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=" + path);
response.setContentType("Content-Type:application/vnd.ms-excel ");
wb.write(output);
output.close();
2、前端代码:
window.open("getExcelList","_blank");
2. poi导入导出
通过POI的使用获取到要导出的Excel工作簿,将其写入输出流。
然后输出流内容会随响应信息传导浏览器前端,弹出保存窗口,选择你要保存的位置。
3. poi多sheet导出
但是导入EXCEL实例是要POI包,这是专门操作excel的
poi 提供的对应的excel操作方法,要完成一个任务,就得自己想办法利用这些方法了,其实好好思考 一下就行了。觉得首先得先熟悉poi的方法。这些基本操作供参考
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 在Excel工作簿中建一工作表,其名为缺省值
// 如要新建一名为"效益指标"的工作表,其语句为:
HSSFSheet sheet = workbook.createSheet("效益指标");
// 在索引0的位置创建行(最顶端的行)
HSSFRow row = heet.createRow((short)0);
//在索引0的位置创建单元格(左上端)
HSSFCell cell = row.createCell((short)0);
// 定义单元格为字符串类型
cell.setCellTypeHSSFCell.CELL_TYPE_STRING);
// 在单元格中输入一些内容
cell.setCellValue("POI Excel Model");
//下一行
row=sheet.createRow( (short)1);
cell=row.createCell( (short)0);
//设置单元格内容
cell.setCellValue( "Powered by 夏天");
// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(outputFile);
// 把相应的Excel 工作簿存盘
workbook.write(fOut); fOut.flush();
// 操作结束,关闭文件
fOut.close();
4. poi导出合并单元格
在家有些无聊,不少心思活络的朋友就想用app赚些零花钱,但是又不知道哪些软件比较靠谱,那么赚零花钱的app哪个比较靠谱呢?一起来了解下吧。
赚零花钱的app哪个比较靠谱?
【1】恐龙有钱:恐龙有钱app是一款合成分红龙赚钱的客户端应用,恐龙有钱软件注册即可获得分红龙,任何用户都能免费参与游戏拿分红赚钱,恐龙有钱邀请徒弟还能免费拿佣金。
【2】疯狂合体鸭:疯狂合体鸭APP是福建瑞趣创享网络科技有限公司推出的休闲挂机搞怪类手赚应用,开局购买一只小黄鸭,通过不断培养合成来提升鸭子战斗力,鸭子可帮忙闯关,造型搞怪,轻松解压,休闲赚钱都不耽误。
【3】米赚:米赚是北京米拓世纪科技有限公司出品的手赚平台,专注于移动威客,安装后完成新手任务即可兑换1Q币,也可兑换话费、提现到支付宝和微信等。
【4】快乐养猪场:快乐养猪场APP是上海嵩沃网络科技有限公司推出的趣味游戏手机赚钱应用,让您成为猪场的主人,下载App后可免费领取新人现金礼包,简单召唤合成,每只猪都能为您赚钱,等级越高赚钱越多,休闲赚钱两不误,养猪还送真猪肉。
5 阿里众包
阿里众包是马云爸爸旗下的众包平台,里面有各种稀奇古怪的任务,拍一张不露脸的生活照片,可以得到三元的收入;填写市场问卷调查,可以获得三元至五元不等的收入。
6 蚂蚁微客
里面会不定时发布一些任务,有红包码和付钱码的推广等,让一个商家柜台上贴上支付宝付款码,可以得到十五元的酬劳。
7 闲鱼
自己用过不想继续使用的东西,扔了多可惜,不如在上面卖掉。
8 地图淘金
地图推出的一款众包类poi数据众包应用。用户可以通过拍门店,拍街边来获得收入,收入较高。
9高德淘金
属于高德地图,和地图淘金差不多。
10 惠头条
无聊的时候刷一些新闻花边小视频,就会有一定的收入。
5. poi批量导入
具体步骤:
1、打开手机微信软件,输入账号和密码进行登录。
2、登录后,点击下方的【发现】图标,再点击上方的【朋友圈】图标。
3、在弹出的界面,点击手机屏幕右上角的【照相机】 图标,然后根据自己的需求选择上传的照片。
4、照片上传完以后,点击【所在位置】。
5、在弹出的页面输入“地理名称”(自己酒店名称),然后点击搜索。
6、提示找不到位置,接下来点击【创建新的位置】。
7、在弹出的窗口输入相关信息,然后点击上方的【完成】。
8、再回到朋友圈,就可以看到自己刚才发布的地理位置显示的是“酒店名称”了,当然也可以设置成其他地方。
6. 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 ==
- 相关评论
- 我要评论
-