合并多个excel工作簿
合并多个Excel工作簿,会出现电话号码以科学计数法显示,如果想要以字符串方式处理,要按如下完整代码
public static void mergeWorkBook() throws Exception {
long startTime = System.currentTimeMillis(); //获取开始时间
String fromPath = "exceldoc\\cases";// excel存放路径
String toPath = "exceldoc/result/";// 保存新EXCEL路径
// 新的excel 文件名
String excelName = "汇总";
// 创建新的excel
HSSFWorkbook wbCreat = new HSSFWorkbook();
File file = new File(fromPath);
for (File excel : file.listFiles()) {
// 打开已有的excel
String strExcelPath = fromPath + "/" + excel.getName();
// input 来源 ,output 目的地
InputStream in = new FileInputStream(strExcelPath);
HSSFWorkbook wb = new HSSFWorkbook(in);
//获取工作簿的名称,不带前缀
String bookName = excel.getName().substring(0,excel.getName().lastIndexOf("."));
// i表示源工作簿 sheet 数量
int sheetnum = wb.getNumberOfSheets();
for (int i = 0; i < sheetnum; i++) {
//开始每个表的处理
HSSFSheet sheet = wb.getSheetAt(i);
// 目标工作簿创建同样的sheet名
String sheetName = sheet.getSheetName();
int firstRow = sheet.getFirstRowNum();
int lastRow = sheet.getLastRowNum();
System.out.println("workbook:"+bookName);
System.out.println("sheetName:"+sheetName);
//如果sheet的lastrow 是0 表示这个表没有内容,这张sheet就不用处理,继续处理下张sheet处理,用continue
if(lastRow == 0 ){
continue;
}
HSSFSheet sheetCreat = wbCreat.createSheet(bookName +"_"+ sheet.getSheetName());
//开始多行的处理
for (int j = firstRow; j <= lastRow ; j++) {
// 创建新建excel Sheet的行
HSSFRow rowCreat = sheetCreat.createRow(j);
// 取得源有excel Sheet的行
HSSFRow row = sheet.getRow(j);
// 单元格式样
//如果行的内容为null ,说明行为空行,此行就跳过,继续下行的处理,用continue
if(null == row){
continue;
}
System.out.println("bookName:"+bookName+"|sheetName:"+sheetName+"|row:"+j);
int lastCell = row.getLastCellNum();
int firstCell = row.getFirstCellNum();
for (int k = firstCell; k < lastCell && lastCell >0; k++) {
String strVal ="";
if (null != row.getCell(k)) {
switch (row.getCell(k).getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
DecimalFormat df = new DecimalFormat("#");
strVal = df.format(row.getCell(k).getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
strVal=row.getCell(k).getStringCellValue() + "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
strVal= row.getCell(k).getBooleanCellValue()+ "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
strVal = row.getCell(k).getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
strVal = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
System.out.println(i+ j + "CELL_TYPE_ERROR");
break;
default:
System.out.print(i+ j + "未知类型 ");
break;
}
//System.out.println(strVal);
rowCreat.createCell(k).setCellType(HSSFCell.CELL_TYPE_STRING);;
rowCreat.getCell(k).setCellValue(strVal+"");
}
}
System.out.println("单行处理完毕");
}
System.out.println("多行处理完毕");
}
System.out.println("多表处理完毕");
}
System.out.println("多个文件处理完毕");
System.out.println(toPath + excelName + ".xls");
FileOutputStream fileOut = new FileOutputStream(toPath + excelName + ".xls");
wbCreat.write(fileOut);
fileOut.close();
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(toPath + excelName + ".xls"));
System.out.println( workbook.getNumberOfSheets());
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
}
主要是要读源文件时要对单元格进行判断
if (null != row.getCell(k)) {
switch (row.getCell(k).getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
DecimalFormat df = new DecimalFormat("#");
strVal = df.format(row.getCell(k).getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
strVal=row.getCell(k).getStringCellValue() + "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
strVal= row.getCell(k).getBooleanCellValue()+ "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
strVal = row.getCell(k).getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
strVal = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
System.out.println(i+ j + "CELL_TYPE_ERROR");
break;
default:
System.out.print(i+ j + "未知类型 ");
break;
}
//System.out.println(strVal);
rowCreat.createCell(k).setCellType(HSSFCell.CELL_TYPE_STRING);;
rowCreat.getCell(k).setCellValue(strVal+"");
}
再在写之前进行写单元格处理:
rowCreat.createCell(k).setCellType(HSSFCell.CELL_TYPE_STRING);;
合并多个excel工作簿的更多相关文章
- 使用SPIRE.XLS来创建Excel 工作簿
使用SPIRE.XLS来创建Excel 工作簿 概要 最近在研究 .NET 控件,使用这些控件在程序中可以快速低成本实现功能. 在这一篇中我们使用的控件是Spire.XL ...
- 把Excel工作簿的每个工作表提取出来保存为新工作簿
平台:MS office 2010 任务:有个excel工作簿,其中有上百个工作表,要求把每一个工作表全部保存为新工作簿,如果一个一个复制出来太傻了,可以用excel自带的VB解决. 方法:打开工作簿 ...
- 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
本文分步介绍了多种从 Microsoft Visual C# 2005 或 Microsoft Visual C# .NET 程序向 Microsoft Excel 2002 传输数据的方法.本文还提 ...
- [办公自动化]excel工作簿内的表无法删除,单击右键无删除键
今天同事问,我自己的工作簿,没有设置保护,但是就是无法删除其中的工作表. 后来发现,她的excel工作簿打开的文件名后面显示[共享]. 原因找到了. 取消共享就可以了.
- 怎么拆分一个Excel工作簿中的多个工作表?
打开需要编辑的Excel文档.如图所示,工作簿下方有很多工作表.现在需要将这些工作表单独拆分开成一个个工作簿. 右键任意一个工作表标签,在弹出的下拉列表中选择查看代码.即弹出代码窗口.如下图所示. ...
- 等Excel工作簿关闭后自动加密压缩备份
;; 等Excel工作簿关闭后自动加密压缩备份.ahk;; 腾讯QQ号 595076941; 作者:boai; 写作日期:2019年5月15日; 版本号:第1版; 手机号(中国移动) 138##### ...
- 等Excel工作簿关闭后自动加密压缩备份2019年10月9日.ahk
;; 等Excel工作簿关闭后自动加密压缩备份2019年10月9日.ahk;; 腾讯QQ号 595076941; 作者:徐晓亮(weiyunwps618); 写作日期:2019年5月15日; 版本号: ...
- excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表
在网上找EXCEL多文件合并的方法,思路: 一.Linux 或者window+cmder,直接用命令行cat合并EXCEL文件,但是,需要安装辅助东西才能直接处理(也许也不可以,但是,可以用文件格式转 ...
- 如何解决excel工作簿保护密码
自己的excel文档设置了“保护工作簿”密码,但是密码又忘记了,怎么办? 如果你会编写代码,那么这个问题非常好解决.Excel内置功能不能解决的事儿,自己编写一段代码或许就可以搞定了. 第一步,大家已 ...
随机推荐
- lesson4:利用jmeter来压测数据库
本文讲述了如何利用jmeter来压测数据库,事例中选取了mysql作为测试数据库,其它的数据库也是一样,只需要更换驱动程序即可. 准备工作:a.mysql数据库安装,请自行百度:b.jdbc驱动包,请 ...
- POJ 2455Secret Milking Machine(二分+网络流之最大流)
题目地址:POJ2455 手残真浪费时间啊..又拖到了今天才找出了错误..每晚两道题不知不觉又变回了每晚一道题...sad.. 第一次在isap中忘记调用bfs,第二次则是遍历的时候竟然是从1開始遍历 ...
- 减少iOS应用程序安装包大小
安装包优化大小方法: <资源优化> 1.去除无用资源 通过几次项目的升级后,项目中会出现一些没有用到的图片.这些图片在我们导入到项目中后,之后项目升级过程后并没有再次用到. 那这些图片我们 ...
- Eclipse 添加快捷方式
1.在/usr/share/applications创建一个desktop文件,命名为eclipse.desktop 文件内容如下 [Desktop Entry]Name=EclipseType=Ap ...
- NeralJS需求整理及思路
NeralJs希望通过解析json数据,动态创建和渲染报表,每个报表呈现一定时间范围的数据,通过使用表格图表等不同的方式,使数据的呈现不死板,且更容易看出规律. 说通俗点,就是动态在一个区域内生成多张 ...
- ORACLE模拟临时文件、日志成员、口令文件丢失情况与恢复【weber出品】
一.临时表空间文件.日志文件和口令文件都属于非关键性文件,因为这些文件丢失后并不会影响到整个数据库的完整性. 但是,当这些文件丢失后我们需要快速的找回这些文件.接下来我将模拟临时表空间文件.日志文件和 ...
- C#小写人民币转大写
public string GetRMB(decimal moneyAmount) { string s = moneyAmount.ToString("#L#E#D#C#K#E#D#C#J ...
- 随笔: WC2016感想
在某些时刻,我可以体会到非常复杂的情感,这种情感神秘的来源不能被描述.它非常的复杂.你无法分清,这种情感是来源于一个个神经元控制的情感系统的一时冲动,亦或是你如实地反馈了你所正在感知的外界. 但我曾在 ...
- var foo= {} ;foo.method() 和 单例模式有什么区别
var Foo={} Foo.method = function() { var i = 0; return { a:function(){ console.log('aa', i++); }, b: ...
- windows下配置lamp环境(0)---软件获取
工作快一年了,还没有怎么配置过服务器环境,经常使用集成套件wampserver,为了复习配置wamp服务器 特意在虚拟机中测试安装步骤如下. 安装前步骤:下载软件.软件下载地址如下: 1.apache ...