import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
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.hssf.util.Region;
/**
* 附件中是模板
* poi-2.5.1-final-20040804.jar
*
* java读取excel文件
*
* 一个Excel文件的层次:Excel文件-> 工作表-> 行-> 单元格 对应到POI中,为:workbook-> sheet-> row-> cell
*
*/
public class testInsertCell {
public static String outputFile = "d:\\shengcheng.xls "; // 生成的文件
public static String fileToBeRead = "d:\\aa.xls ";// 模板
/**
*
* 读取excel,遍历各个小格获取其中信息,
*
*
* 注意: 1.sheet, 以0开始,以workbook.getNumberOfSheets()-1结束 2.row,
* 以0开始(getFirstRowNum),以getLastRowNum结束 3.cell,
* 以0开始(getFirstCellNum),以getLastCellNum结束, 结束的数目不知什么原因与显示的长度不同,可能会偏长
*
*
*/
public void readExcel() {
try {
// 创建对Excel工作簿文件的引用
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(
fileToBeRead));
// workbook.getNumberOfSheets());//获取sheet数
for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (null != workbook.getSheetAt(numSheets)) {
HSSFSheet aSheet = workbook.getSheetAt(numSheets);// 获得一个sheet
System.err.println(aSheet.getFirstRowNum());
for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet
.getLastRowNum(); rowNumOfSheet++) {
if (null != aSheet.getRow(rowNumOfSheet)) {
HSSFRow aRow = aSheet.getRow(rowNumOfSheet);
for (short cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
List list =new ArrayList();
list.add("1");
list.add("2");
// list.add("3");
// list.add("4");
// list.add("5");
// list.add("6");
// list.add("7");
// list.add("8");
// list.add("9");
// list.add("10");
// rowNumOfSheet 表示动态生成那一行的上一行的num,例如11行是模板中的出票保证信息
while (rowNumOfSheet == 10&&cellNumOfRow==0) {
for (int i = list.size()-1; i >0; i--) {
int newRow=11;
int rows = 1;//设定插入几行
aSheet.shiftRows(newRow, aSheet.getLastRowNum(), rows);
HSSFRow sourceRow =aSheet.getRow(newRow);
aSheet.addMergedRegion(new Region(newRow,(short) 2, newRow,(short) 2)); //
HSSFCell cew2 =sourceRow.createCell((short) 2);
addSyteml(workbook,aSheet,newRow,newRow,2,2);
cew2.setEncoding(HSSFCell.ENCODING_UTF_16);
cew2.setCellValue("保证人名称");
aSheet.addMergedRegion(new Region(newRow,(short) 3, newRow,(short) 4)); //
HSSFCell cew3 =sourceRow.createCell((short) 3);
addSyteml(workbook,aSheet,newRow,newRow,3,4);
cew3.setEncoding(HSSFCell.ENCODING_UTF_16);
cew3.setCellValue(list.get(i).toString());
aSheet.addMergedRegion(new Region(newRow,(short) 5, newRow,(short) 6)); //
HSSFCell cew5 =sourceRow.createCell((short) 5);
addSyteml(workbook,aSheet,newRow,newRow,5,6);
cew5.setEncoding(HSSFCell.ENCODING_UTF_16);
cew5.setCellValue("保证人地址");
aSheet.addMergedRegion(new Region(newRow,(short) 7, newRow,(short) 12)); //
HSSFCell cew11 =sourceRow.createCell((short) 7);
addSyteml(workbook,aSheet,newRow,newRow,7,12);
cew11.setEncoding(HSSFCell.ENCODING_UTF_16);
cew11.setCellValue(list.get(i).toString());
aSheet.addMergedRegion(new Region(newRow,(short) 13, newRow,(short) 15)); //
HSSFCell cew12 =sourceRow.createCell((short) 13);
addSyteml(workbook,aSheet,newRow,newRow,13,15);
cew12.setEncoding(HSSFCell.ENCODING_UTF_16);
cew12.setCellValue("保证日期");
aSheet.addMergedRegion(new Region(newRow,(short) 16, newRow,(short) 18)); //
HSSFCell cew13 =sourceRow.createCell((short) 16);
addSyteml(workbook,aSheet,newRow,newRow,16,18);
cew13.setEncoding(HSSFCell.ENCODING_UTF_16);
cew13.setCellValue(list.get(i).toString());
if (i==1){
aSheet.addMergedRegion(new Region(10,(short) 0, 10+list.size()-1,(short) 1)); //
HSSFCell cew =sourceRow.createCell((short) 0);
addSyteml(workbook,aSheet,10,10+list.size()-1,0,1);
cew.setEncoding(HSSFCell.ENCODING_UTF_16);
cew.setCellValue("出票保证信息");
}
}
break;
}
List lis1t =new ArrayList();
lis1t.add("111");
lis1t.add("222");
lis1t.add("333");
lis1t.add("444");
lis1t.add("555");
//当出票保证信息为0条的时候下面的标题合并出问题,加此判断
int size=list.size();
if(size==0){
size=1;
}
while (rowNumOfSheet == 17+size&&cellNumOfRow==0) {
for (int i = lis1t.size()-1; i >0; i--) {
int newRow=17+size;
int rows = 1;//设定插入几行
aSheet.shiftRows(newRow, aSheet.getLastRowNum(), rows);
HSSFRow sourceRow =aSheet.getRow(newRow);
aSheet.addMergedRegion(new Region(newRow,(short) 2, newRow,(short) 2)); //
HSSFCell cew2 =sourceRow.createCell((short) 2);
addSyteml(workbook,aSheet,newRow,newRow,2,2);
cew2.setEncoding(HSSFCell.ENCODING_UTF_16);
cew2.setCellValue("保证人名称");
aSheet.addMergedRegion(new Region(newRow,(short) 3, newRow,(short) 4)); //
HSSFCell cew3 =sourceRow.createCell((short) 3);
addSyteml(workbook,aSheet,newRow,newRow,3,4);
cew3.setEncoding(HSSFCell.ENCODING_UTF_16);
cew3.setCellValue(lis1t.get(i).toString());
aSheet.addMergedRegion(new Region(newRow,(short) 5, newRow,(short) 6)); //
HSSFCell cew5 =sourceRow.createCell((short) 5);
addSyteml(workbook,aSheet,newRow,newRow,5,6);
cew5.setEncoding(HSSFCell.ENCODING_UTF_16);
cew5.setCellValue("保证人地址");
aSheet.addMergedRegion(new Region(newRow,(short) 7, newRow,(short) 12)); //
HSSFCell cew11 =sourceRow.createCell((short) 7);
addSyteml(workbook,aSheet,newRow,newRow,7,12);
cew11.setEncoding(HSSFCell.ENCODING_UTF_16);
cew11.setCellValue(lis1t.get(i).toString());
aSheet.addMergedRegion(new Region(newRow,(short) 13, newRow,(short) 15)); //
HSSFCell cew12 =sourceRow.createCell((short) 13);
addSyteml(workbook,aSheet,newRow,newRow,13,15);
cew12.setEncoding(HSSFCell.ENCODING_UTF_16);
cew12.setCellValue("保证日期");
aSheet.addMergedRegion(new Region(newRow,(short) 16, newRow,(short) 18)); //
HSSFCell cew13 =sourceRow.createCell((short) 16);
addSyteml(workbook,aSheet,newRow,newRow,16,18);
cew13.setEncoding(HSSFCell.ENCODING_UTF_16);
cew13.setCellValue(lis1t.get(i).toString());
if (i==1){//当是循环中的最后一条数据的时候将总标题嵌入到最前面
aSheet.addMergedRegion(new Region(newRow-1,(short) 0, newRow+lis1t.size()-2,(short) 1)); //
HSSFCell cew =sourceRow.createCell((short) 0);
addSyteml(workbook,aSheet,newRow-1,newRow+lis1t.size()-2,0,1);
cew.setEncoding(HSSFCell.ENCODING_UTF_16);
cew.setCellValue("出票保证信息");
}
}
break;
}
HSSFCell aCell = aRow.getCell(cellNumOfRow);
int cellType = aCell.getCellType();
if (cellType == 0) {//number型
aCell.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文处理
int NumericCellValue = (int) aCell.getNumericCellValue();//得到模板中值所在cell中的数字
switch (NumericCellValue) {
case 1: //出票日期
aCell.setCellValue("111");
break;
case 2: //票据号码
aCell.setCellValue("111");
break;
case 3://出 票 人全 称
aCell.setCellValue("111");
break;
case 4://出票人账号
aCell.setCellValue("111");
break;
}
}
FileOutputStream fOut = new FileOutputStream(
outputFile);
// 把相应的Excel 工作簿存盘
workbook.write(fOut);
fOut.flush();
// 操作结束,关闭文件
fOut.close();
}
}
}
}
}
}
} catch (Exception e) {
System.out.println("ReadExcelError " + e);
}
}
public static void main(String[] args) {
System.out.println("开始 ");
testInsertCell poi = new testInsertCell();
poi.readExcel();
System.out.println("结束 ");
}
/**
* 设置动态数据的样式
*
*/
private static void addSyteml(HSSFWorkbook workbook,HSSFSheet aSheet,int rowFrom,int rowTo,int columnFrom,int columnTo){
HSSFCellStyle cloneStyle = workbook.createCellStyle();
cloneStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cloneStyle.setBorderLeft((short)0);
cloneStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cloneStyle.setBorderBottom((short)0);
cloneStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
for(int i=rowFrom;i<=rowTo;i++){
HSSFRow row_temp = aSheet.getRow(i);
for(int j=columnFrom;j<=columnTo;j++){
HSSFCell cell_temp = row_temp.getCell((short)j);
if(cell_temp ==null ){
cell_temp = row_temp.createCell((short)j);
}
cell_temp.setCellStyle(cloneStyle);
}
}
}
}
相关推荐
Java语言利用POI读取excel文档,利用Freemarker建立word模板(带图片),excel每一行数据生成单个word文档,再利用POI合并成一个word文档
需求: 现有一个excel文档,该文档从第三行开始,每一行代表一个化石及其相关的登记资料,如图1,现在需要将每一行数据的内容,填写到对应的word文档中,并将入库照片编号对应的照片插入对应位置,如图2,最后要求不能生成单个的word文档,因为文档个数多了,不方便整理和打印,需要合并成一个或者多个; 图1: 图2: 实现思路: Java语言利用...
POI实现插入行
http://hi.baidu.com/xiangliling/blog/item/9555da036d24b8f909fa9323.html 最近用POI实现根据模板导出excel,需要从中间行插入查询到的数据 但是用creatRow生成的数据会覆盖后面的模板内容 查了API没有找到插入行的方法 不过找到shiftRows方法将最后的空行移到需要插入行的位置,再用cre...
深入探究贝叶斯网络(Bayesian Network):从基础原理到实际应用
贝叶斯网络,也称为信念网络或有向无环图模型,是一种概率图模型。它使用有向无环图(DAG)来表示随机变量之间的条件依赖关系。每个节点代表一个随机变量,边表示变量之间的条件依赖关系。贝叶斯网络作为一种强大的工具,通过结合概率论和图论,为复杂系统建模和推理提供了有效手段。无论是在医学诊断、故障检测还是自然语言处理等领域,它都展示了巨大的潜力。然而,其计算复杂度高、结构学习困难等挑战也需要我们在实际应用中不断优化算法和技术。希望通过本文,你能对贝叶斯网络有更深入的理解,并能够在实际项目中灵活应用这一强大工具。
java Poi操作Excel,插入行,保留行格式
动态Excel,如何在指定行后插入一定数量的空行,并且拷贝指定行的样式
Flowable第一篇、快速上手(Flowable安装、配置、集成)
Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用
Unity中的坐标系及其转换方法
Unity中的坐标系及其转换方法 Unity中有四种坐标系: 1.全局坐标系 World Coordinate System 全局坐标系是用于描述场景内所有物体位置的方向的基准,也称为世界坐标系,Unity中创建的物体都是以全局坐标系中的坐标原点(0,0,0),来确定各自的位置的,可以使用transform.position来获取游戏对象的世界坐标。 2.局部坐标系 Local Coordinate System 局部坐标系也称为模型坐标系或物体坐标系,每个物体都有自身独立的物体坐标系。当物体移动或改变方向
poi 导出excel实战与word新增行与excel添加背景色与设置单元格边框
poi导出excel
Cadence笔记--原理图导入PCB
根据PCB尺寸画PCB外观尺寸,这里注意X\Y不能超过指定的区域,X\Y的最大值在setuo的grids里设置,画完后保存并关闭工程然后重新打开(不理解为何)由于只画了一个PMU6050,所以这里只有一个器件。工程选择board,选择存储路径和名称。6、重新网格导入,保证网表导入无误;注意网表保存的路径。
java insert row,POI ,Java 操作 Excel 实现行的插入(insert row)
POI ,Java 操作 Excel 实现行的插入(insert row)前几天,正在做一个项目,主要用 POI 来操作 Excel其中,要使用一个,插入功能。主要是因为从数据库,返回结果集(数据明细),来动态车生成新行,插入明细在网上找了找,没有找到,好的方法自己写了一个:public static void insertRow(HSSFWorkbook wb, HSSFSheet sheet,...
外骨骼机器人(二):自适应振荡器
振荡器是一种数学工具,可以用于实时跟踪、预测类周期信号的频率、相位、幅值等,而助行外骨骼机器人需要自动适应人体的行走频率、幅度,两者相结合,就能使助行外骨骼机器人拥有更舒适、更自然的行走步态。 ......
嵌入式开发环境Vscode开发STM32单片机程序
STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc +开发单片机程序的经验。(这里不解释 gcc 是什么)。
java poi操作excel文件 (新建Excel文件 添加行列、单元格)
/** * 新建一个Excel文件,里面添加5行5列的内容,再添加两个高度为2的大单元格。 * * @param fileName */ public void writeExcel(String fileName) { // 目标文件 File file = new File(fileName); FileOutputStream fOut = null; ...
【ComfyUI】QwenImageEdit OOTD角色与姿态匹配换装
本文介绍了一个基于Qwen Edit OOTD 2.0的ComfyUI工作流,能够实现角色与姿态匹配的智能穿搭生成。该工作流通过整合模型推理、姿态识别、图像拼接和渲染等节点,完成从角色图、姿态图到成品穿搭图的完整生成流程。核心采用Qwen Image系列模型进行图像理解和编辑,配合ControlNet进行姿态引导。用户只需提供角色图和姿态参考图,系统即可自动完成姿态解析、语义编码、采样生成等步骤,输出与输入姿态一致的穿搭图像。该方案适用于虚拟角色展示、电商试穿等场景,能保持角色特征一致的同时灵活变换姿态,显
Java读取Excel模板并动态添加数据
在项目开发中,会经常遇到报表的需求;遇到报表后,不可避免的会与Excel打交道。那么面对复杂的表头或者其他要求要怎么处理?我们可以通过模板文件来进行解决!
科研牛马千万不要错过!手把手教你用AI精准匹配真实参考文献,仅需一个专业应用+两个提示词指令
当然也可以借助生成式AI,如GPT-5.2、Gemini 3 Pro粘贴段落,输入设计好的提示词,让模型根据段落内容匹配参考文献,并正确引用到段落合适位置,再按规范格式输出参考文献列表。阅读我提供的【正文文本】,为其中的关键论点寻找真实的、权威的参考文献(优先来源于Nature, Science, IEEE, ACM, PubMed等),并插入引用。若在段落中已经引用好了参考文献,也有参考文献列表,担心引用位置不当或论点、论述逻辑与文献不够契合,则可以用以下结构化提示词,让AI辅助审查。
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
根据excel模板(带计算公式)实现导出功能
一、需求 需求是需要实现一个导出excel文件的功能,但是提供的模板较为复杂,并且大量单元格附带公式。 ps:这只是需要导出的一小部分,带颜色的单元格都是含有公式的,而且需要导出的是一个xlsx中有3个类似的sheet。 二、思路 既然提供模板文件已经很复杂化了,所以不打算用代码进行生成了(写起来会很麻烦),第三方也没有找到能满足我需求的,所以想直接读取现有的模板,然后将需要的值一个个填入进去,最后刷新sheet表的公式(这个很重要,不然只会显示填入了值,其他带公式的单元格不会自...
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
POI基于Excel模板导出数据
好处:通过ExcelExportEngine引擎可以实现只关注模板,即使修改了模板,代码也不需要改动,更加便捷。看我们刚才导出时写的代码,必须要提前知道要导出数据在哪一行哪一个单元格,但是如果模板一旦发生调整,那么我们的java代码必须要修改,我们可以自定义个导出的引擎,有了这个引擎即使模板修改了我们的java代码也不用修改。
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
POI在指定excel插入行java
我想在第三行,插入数据库的数据,这里假如数据库有10条,并且继承第二行的格式 数据库数据{"clark",25},我写个json对象,10条这个 读xls,xlsx,io流,fastJson整体,可直接复制 结果
POI 读取excel模板,动态添加数据行和图片
需求就是生成一个excel,要求就是数据大于10行的时候动态添加,小于10行的时候,原来的模板不变,只是填充数据。 还有一些小需求比如说添加图片所以本篇文章分三部分。 目录 读取模板 动态添加行数据 这里有一个小坑 插入图片 读取模板 try (FileInputStream is = new FileInputStream(mdlpart); XSSFWorkbook work...
springboot读取excel文件模板写入数据,并下载
先定好excel头部内容,样式等,以此为模板,插入表格数据,就不用HSSFCellStyle类设置样式了。 例如: 前4行内容是不变的,从第五行开始 从数据库拿出数据 写入表格 完成后 pom.xml,必要两个依赖 <dependency> <groupId>org.apache.poi</groupId> ...
Android 基于POI库,根据模板导出word文档
记录下来,也是为了记录自己的踩坑日记。
poi读取Excel模板并修改模板内容与动态的增加行
poi读取Excel模板并修改模板内容与动态的增加行 ShiftRows方法使用
【Java】使用POI按模板样式导出Excel
1. 将excel表抽象为xy轴坐标图,更易于理解POI的操作,y轴对应行,x轴对应列,每个单元格都有一个xy坐标。 2. 单元格才是实际可操作的对象,行和列都只是用来定位单元格位置的。所以新增行后都要根据列数进行循环,来新增单元格。 3. 新增的单元格都不具备任何样式,可以获取其他单元格的样式进行赋予。 4. 如果不涉及对模板新增行、新增列等操作,那修改一下单元格的值就够用了,毕竟单元格样式完全可以在wps先设置好。
SpringBoot使用POI实现Excel导入导出及模板下载
pom文件 <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> &...
java poi 模板 导出_java后台poi根据模板导出excel
public classExcelUtils {private static final String INSPECTIONRECORD_SURFACE_TEMPLET_PATH = "download\\template\\materialList.xlsx";private static XSSFCellStyle cellstyle = null;public static void exp...
2882



被折叠的 条评论
为什么被折叠?



