永发信息网

Java POI 如何取当前sheet中合并的单元格区域数组

答案:1  悬赏:60  手机版
解决时间 2021-04-01 19:34
Java POI 如何取当前sheet中合并的单元格区域数组
最佳答案
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public void exportExcelFile(String inputFile, String outputFile, List dataList) throws Exception
{
//用模板文件构造poi
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));
//创建模板工作表
HSSFWorkbook templatewb = new HSSFWorkbook(fs);
//直接取模板第一个sheet对象
HSSFSheet templateSheet = templatewb.getSheetAt(1);
//得到模板的第一个sheet的第一行对象 为了得到模板样式
HSSFRow templateRow = templateSheet.getRow(0);

//HSSFSheet timplateSheet = templatewb.getSheetAt(1);
//取得Excel文件的总列数
int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();
Debug.println("columns is : " + columns);
//创建样式数组
HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];

//一次性创建所有列的样式放在数组里
for (int s = 0; s < columns; s++)
{
//得到数组实例
styleArray[s] = templatewb.createCellStyle();
}
//循环对每一个单元格进行赋值
//定位行
for (int rowId = 1; rowId < dataList.size(); rowId++)
{
//依次取第rowId行数据 每一个数据是valueList
List valueList = (List) dataList.get(rowId - 1);
//定位列
for (int columnId = 0; columnId < columns; columnId++)
{
//依次取出对应与colunmId列的值
//每一个单元格的值
String dataValue = (String) valueList.get(columnId);
//取出colunmId列的的style
//模板每一列的样式
HSSFCellStyle style = styleArray[columnId];
//取模板第colunmId列的单元格对象
//模板单元格对象
HSSFCell templateCell = templateRow.getCell((short) columnId);
//创建一个新的rowId行 行对象
//新建的行对象
HSSFRow hssfRow = templateSheet.createRow(rowId);
//创建新的rowId行 columnId列 单元格对象
//新建的单元格对象
HSSFCell cell = hssfRow.createCell((short) columnId);
//如果对应的模板单元格 样式为非锁定
if (templateCell.getCellStyle().getLocked() == false)
{
//设置此列style为非锁定
style.setLocked(false);
//设置到新的单元格上
cell.setCellStyle(style);
}
//否则样式为锁定
else
{
//设置此列style为锁定
style.setLocked(true);
//设置到新单元格上
cell.setCellStyle(style);
}
//设置编码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//Debug.println("dataValue : " + dataValue);
//设置值 统一为String
cell.setCellValue(dataValue);
}
}
//设置输入流
FileOutputStream fOut = new FileOutputStream(outputFile);
//将模板的内容写到输出文件上
templatewb.write(fOut);
fOut.flush();

//操作结束,关闭文件
fOut.close();

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
TOTO蹲便器和乐家蹲便器哪个好
痴情女夙兴夜寐求下联.非正常类下联
我们来了第二季0923期最美消防官出来的时候放
国家海洋局蓬莱海洋环境监测站这个地址在什么
男孩生于2008年10月初2上午10点多属金木水火
SMT的物料单位换算关系
青岛初中生关于课外古文阅读提高比较好的辅导
6个半月,想问问这肚型是男孩还是女孩?谢谢
今日上班开车中途发现一只大蜘蛛爬过引擎盖上
3.3加上6.7乘以1.8的简便远算
有一点机会打一字谜的谜语
读一棵大树有感300字
我带电剪电线为什么没事
请问在计算人防地下室的工程量时,应该是以平
男主傅莫深,女主叫苏然的小说
推荐资讯
56周岁,女,想买社保一次性拿齐,多少钱!交
全世界第一家广播电台是在哪个国家成立的
雪碧有营养吗?喝它好吗?
水由什么元素组成的,由什么分子或原子构成
暖春电视剧小花现在多大了
为名为利打拼的微信说说
头发做完理子烫可以熨头发么
32-x=12怎么做
什么是无线电物理专业,主要研究内容是什么?
新款哈弗h6是不是全系配备全景天窗
粉掌夏季怎么养
现在的远洋普通海员真的是月薪过万吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?