-
2021-03-05 13:34:04
/**
* 删除列
* @param path excel路径
* @param col要删除的列
*/
public static void revomeColCell(String path, int col) {
try {
FileInputStream fis = new FileInputStream(new File(path));
HSSFWorkbook hb = new HSSFWorkbook(fis);
int row = hb.getSheetAt(0).getLastRowNum();
HSSFSheet hs = hb.getSheetAt(0);
for (int i = 0; i
int totalCol = hb.getSheetAt(0).getRow(i).getLastCellNum();
HSSFRow hr = hs.getRow(i);
for (int j = 0; j
if (col == j) {// 表示要删除的行
//移除当前列,把后面的列前移
for (int k = j; k
HSSFCell hc = hr.getCell(k);
if (null != hc) {
hr.removeCell(hc);
}
if (null != hr.getCell(k + 1)) {
hr.moveCell(hr.getCell(k + 1), (short) k);
}
}
}
}
}
FileOutputStream fos = new FileOutputStream(path);
hb.write(fos);
fos.flush();
fis.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
删除行你看一下,HSSFSheet里的shiftRows(int startRow,
int endRow, int n) 方法。这个方法的原理也是把下面的行住上面移,覆盖了你要删除的行。
更多相关内容 -
POI DataValidation 删除数据有效性验证
2019-10-14 19:32:28POI DataValidation项目中用到Apache POI来处理Execl,模板文件中有数据有效性的验证,处理时需要添加行,导致原有需要数据有效验证的单元格向下移动。经过测试发现POI对于数据有效性验证只能添加,不能删除。
在网上看到一篇文章作者的作法是可以通过直接修改execl的XML节点的方式,达到修改,删除数据有效性的目的。(原文链接)
本人项目需求不需要修改只需要删除在重新添加即可,以下是具体代码实现。import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class RemoveDataValidation { public static void main(String[] args) { String url = "D:\\test.xlsx"; InputStream inputStream = null; OutputStream outputStream1 = null; String newFileName = "D:\\new_test.xlsx"; XSSFWorkbook wb = null; try { inputStream = new FileInputStream(url); wb = new XSSFWorkbook(inputStream); XSSFSheet ws = wb.getSheet("Sheet2"); delValidations(ws); outputStream1 = new FileOutputStream(newFileName); wb.write(outputStream1); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block } catch (IOException e) { // TODO } finally { try { inputStream.close(); wb.close(); outputStream1.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void delValidations(XSSFSheet ws) { try { CTWorksheet worksheet = (CTWorksheet) ReflectHelper.getValueByFieldName(ws, "worksheet"); Node domNode = worksheet.getDomNode(); NodeList childNodes = domNode.getChildNodes(); int size = childNodes.getLength(); for (int i = 0; i < size; i++) { Node childNode = childNodes.item(i); // if node name is dataValidations if ("dataValidations".equals(childNode.getNodeName())) { // remove childnode from worksheet domNode.removeChild(childNode); break; } } } catch (Exception e) { // TODO } }
-
Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)
2021-02-09 00:00:58POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是:sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2));自适应列宽度:sheet.autoSizeColumn(1);sheet....POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是:
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2));
自适应列宽度:
sheet.autoSizeColumn(1);
sheet.autoSizeColumn(1, true);
这两种方式都是自适应列宽度,但是注意这个方法在后边的版本才提供,poi的版本不要太老。 注意:第一个方法在合并单元格的的单元格并不好使,必须用第二个方法。
sheet.setColumnWidth(m, “列名”.getBytes().length*2*256);
这个方法是计算字符串的长度,以便设置列宽,该方法在解决中文的问题上比较好,前面两种方法对中文不好好用。。。。
还有在自适应宽度的时候,有时候遇到单元格是公式单元格,自适应不起作用,那是因为单元格存的是公式,并不是真正的数据,解决方法:
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook());
CellValue cell71Val = evaluator.evaluate(cell71);
cell71.setCellValue(cell71Val.getNumberValue());
将格式化后的数据再次set进去,就是真正的值了。
//字体
HSSFFont font = workbook.createFont();
font.setFontName("仿宋_GB2312");
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font.setFontHeightInPoints((short) 12);
HSSFCellStyle style = workbook.createCellStyle();
//设置颜色
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);//前景颜色
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//填充方式,前色填充
//边框填充
style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
style.setFont(font);
style.setWrapText(false);
POI 实现合并单元格以及列自适应宽度
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...
java导出标题多行且合并单元格的EXCEL
场景:项目中遇到有需要导出Excel的需求,并且是多行标题且有合并单元格的,参考网上的文章,加上自己的理解,封装成了可自由扩展的导出工具 先上效果,再贴代码: 调用工具类进行导出: public st ...
C#DataTable导出Excel,并实现合并单元格
asp.net webwofrm后台代码----------建议Framework4.0及以上,3.5试过出现好多莫名错误... 首先导入两个程序集.我的是 office2003,引用的COM里面的 ...
Java导出Excel表(poi)名中文乱码问题处理
String _filename = ValidateTools.date2Str(da ...
poi读取合并单元格
poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...
poi导出excel合并单元格(包括列合并、行合并)
1 工程所需jar包如下:commons-codec-1.5.jarcommons-logging-1.1.jarlog4j-1.2.13.jarjunit-3.8.1.jarpoi-3.9-2012 ...
php 数据导出到excel 2种带有合并单元格的导出
具体业务层面 可能会有所不同.以下两种方式涉及的合并单元格地方有所不同,不过基本思路是一致的. 第一种是非插件版本.可能更容易理解点,基本思路就是 组装table 然后 读取 输出到excel上.缺点 ...
poi获取合并单元格内的第一行第一列的值
当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: import java.io.FileInputStream; impo ...
C#导出Excel按照指定格式设置单元格属性值
最近项目中一直在写XML.Table.Excel之间的转化.之前一直都是不考虑格式的导出,今天给出一个格式,让按照格式导出,还真把我这新手为难了一翻,网上给出的资料基本一样.为了一个单元格文字变色纠结 ...
随机推荐
利用css中的background-position定位图片
今天遇到一个新鲜的问题,如果定位一个设计师设计的图片.例子如下: 实现只显示每一个图标,主要是将图片等分,然后通过background-position来控制,注意等分的时候要减一,第一个百分比表示x ...
leetcode 82. Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
D3 学习资源
发现这个网站还是挺不错的:http://www.ourd3js.com/wordpress/
Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画
什么是IK? IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学), ...
Poj 3030 Nasty Hacks
1.Link: http://poj.org/problem?id=3030 2.Content: Nasty Hacks Time Limit: 1000MS Memory Limit: 655 ...
Core Animation之CABasicAnimation
在iOS中,图形可分为以下几个层次: 越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低:反之亦然.本文着重介绍Core Animation层的基本动画实现方案. 在iOS中,展示动画可以类比 ...
webpack4: compilation.mainTemplate.applyPluginsWaterfall is not a function 解决方法
今天捣鼓webpack4踩到一个弥天大坑:使用html-webpack-plugin打包html的时候一直报 compilation.mainTemplate.applyPluginsWaterfal ...
Angular调用Asp.net Core JWT Authentication接口
基本思路是调用登录接口,获取token,使用token请求其他JWT接口: getHomeDetails(): Observable { let headers ...
更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9
更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9 解决办法:删除pod里导入的库文件,跑一下pod,再重新导入这些库文件,跑pod ...
Docker Compose demo 使用
1.docker compose 安装 curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker- ...
-
poi删除带有合并单元格的行的问题
2014-08-30 18:22:27在网上搜了很久关于poi删除带有合并单元格的行后,下面在网上搜了很久关于poi删除带有合并单元格的一行后,下面行数据向上移动一行时,出现乱合并的问题,看到有人提过这个问题,但是郁闷的很没有一个人回答过,而且大部分的文章都是关于什么合并单元格,读取Excel,写入Excel,真搞不懂,能来一个创新点的吗,唉!我出现的情况,如下图情况
原模板文件:
删除地11行带有合并单元格的行后,后面的数据上移,导致第12行上移后出现乱合并问题
我现在只有这种方法:因为是读取模板,向模板中写入数据,即模板就会固定,则通过找到要操作的带有合并单元格的行,通过removeMergedRegion(int i)这个方法来移除合并单元格,移除和即对应的行没有合并单元格了,再将后面的数据上移sheet.shiftRows(lastRowNum-4,lastRowNum,-1),根据这个思路看下面的代码:
public class PoiExcel { public static void main(String[] args) { try { InputStream is = new FileInputStream("report.xls"); try { HSSFWorkbook workbook = new HSSFWorkbook(is);//找到工作博 //获取sheet HSSFSheet sheet = workbook.getSheetAt(0);//找到sheet int lastRowNum = sheet.getLastRowNum(); HSSFRow row = null; if(sheet.getRow(0)==null){ row = sheet.createRow(0); }else{ row = sheet.getRow(0); } // 向模板中写入数据 HSSFCell cell = row.createCell(0); cell.setCellValue("100000"); if(sheet.getRow(10)==null){ row = sheet.createRow(10); }else{ row = sheet.getRow(10); } HSSFRow rows = sheet.getRow(lastRowNum-5); rows.createCell(0).setCellValue("11111"); rows.createCell(1).setCellValue("9283"); rows.createCell(2).setCellValue("2222"); rows.createCell(3).setCellValue("5555"); rows.createCell(4).setCellValue("444"); //寻找指定的合并单元格,再移除 removeMergedRegion(sheet, lastRowNum-5, 1); //再将后面的数据向上移动 sheet.shiftRows(lastRowNum-4,lastRowNum,-1); OutputStream os = new FileOutputStream("D:/保费报表.xls"); workbook.write(os);//将内存的中excel写入到保费报表.xls中 } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } } public static void removeMergedRegion(HSSFSheet sheet,int row ,int column) { int sheetMergeCount = sheet.getNumMergedRegions();//获取所有的单元格 int index = 0;//用于保存要移除的那个单元格序号 for (int i = 0; i < sheetMergeCount; i++) { CellRangeAddress ca = sheet.getMergedRegion(i); //获取第i个单元格 int firstColumn = ca.getFirstColumn(); int lastColumn = ca.getLastColumn(); int firstRow = ca.getFirstRow(); int lastRow = ca.getLastRow(); if(row >= firstRow && row <= lastRow) { if(column >= firstColumn && column <= lastColumn) { index = i; } } } sheet.removeMergedRegion(index);//移除合并单元格 } }
删除后的结果:
-
java poi对Excel表格进行单元行删除
2019-07-18 15:43:27java poi对Excel表格进行单元行删除 ...一般使用POI删除单元行有两种方法 一种只删除单元行中的内容,不删除单元行 即 sheet.remove(row); //sheet即取得的工作表,row表示要具体删除的行 这个方法... -
poi操作excel之删除模版的合并行
2021-05-10 17:42:44poi操作excel之删除模版的合并行 如果在模版中有合并行,使用 sheet.shiftRows(开始行,结束行,移动行数); 删除行的话会报错。所以有了以下代码。得先删除原有的行合并才能做删除移动。 // 参数1:sheet、参数2:开始行... -
POI处理excel(单元格赋值,读值)
2018-09-29 17:35:55* 获取指定位置单元格的值 * 设置指定位置单元格的值 */ public class MyPOIUtils { public static Workbook workbook ; public static FileInputStream fileInputStream ; public static FileOutputStream... -
java-如何使用Apache POI移动特定的单元格?
2019-12-09 14:32:56有什么方法可以向下移动特定单元格,并可以将行插入到特定区域中,如下所示:在给定的示例中,我想在region1中再添加一行(也保留所有旧行),它将变为: region1: region2: newval newval A 1 John 2 B 2 ... -
Java POI 对Excel合并单元格的数据处理
2021-05-12 17:21:08Java POI 对Excel合并单元格的数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求。 Excel工具类 public class ExcelUtil { ... -
poi移动列和删除列
2021-04-02 16:11:08Java poi 移动列 删除列移动列删除列最后 移动列 从poi4.0.0开始,在sheet里面提供了一个shiftColumns(int startColumn, int endColumn, final int n)api, 移动开始列、结束列和移动列数。 需要注意的是, 移动到... -
原生的POI使用SXSSF设置单元格颜色
2022-02-15 16:38:26Java使用原生的POI操作导出Excel, 合并单元格, 设置颜色, 合并单元格的性能问题. -
poi word 删除表格
2019-04-22 19:00:07poi 删除表格,docx 版 /** * 删除表格 * @param table 表格对象 */ public static void deleteTable(XWPFTable table){ List<XWPFTableRow> rows = table.getRows(); int rowLength = ... -
POI 关于单元格名字获得单元格内容的中文文档Named Ranges and Named Cells
2019-11-26 16:03:02因为有个需求是根据自定义的单元格名字去获得单元格内容,网上翻了半天也没有找到有人写过比较完善的,所以只好看令人头疼的官方文档自己写了。 ... -
poi生成word特殊表格合并单元格,wps不兼容问题
2020-05-12 19:32:29百度了半天没百度出来解决的问题,可能是poi技术就是不支持吧....首先这个模板里第一行是6个单元格 ,第二行第三行都是8个单元格 我们的业务是得到一个存放数据的列表,然后我拿到列表判断里面是有有值. 有的话我... -
POI Word表格删除行removeRow()
2021-04-27 20:53:531 pom.xml(Maven依赖文件) <dependency>...org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <depend. -
java使用poi操作excel删除一整行
2021-02-21 16:05:08java使用poi操作excel删除一...从第5行开始到最后一行都向上移动1行,会把第四行覆盖掉,实现删除指定行的效果。 需求2:读取指定单元格数据(第5行第4列) 代码示例: Cell cell = sheet.getRow(4).getCell(3); 因为 -
一个复杂的poi处理 合并单元格及其样式对齐问题
2013-08-05 11:08:04//在queryDatePosition 指定的位置写入查询时间 sheet.getRow(queryDatePosition[0]).getCell(queryDatePosition[1]).setCellValue(queryDateSection); List,Object>> stpps = (List,Object>>)data.get(... -
POI实战 .pdf
2018-02-01 15:53:531.POI入门 4 1.1 Excel基本知识 4 1.2 POI基本类 5 1.3 POI简单读取Excel数据 5 1.4 POI简单写出Excel 9 2.复杂读取 16 2.1 单元格各类型数据读取 16 2.1.1 基本类型 16 2.1.2 日期类型 18 2.2 自定义类型 21 3.... -
POI按照Word文档指定标题进行拆分
2021-08-30 01:11:38/** * 根据文档将所有段落都遍历一遍,找到对应标题的,讲其他元素删除,保留原有样式 * https://blog.csdn.net/qq_37201321/article/details/91864843 */ public class HelloWorld { public static void main... -
java-Apache POI合并Word文档中表格中的单元格
2020-12-31 03:18:42我需要有一个表格,其中第一行和第二行的单元格已合并.像这样:我一直在审查与该主题相关的所有问题,并且找到了将网格跨度应用于单元格的一些答案,但找不到真正的解决方案.这是我从google和本网站获得的示例中的代码... -
利用poi开源jar包操作Excel时删除行内容与直接删除行的区别
2021-03-15 13:58:47一般情况下,删除行时会面临两种情况:删除行内容但保留行位置、整行删除(删除后下方单元格上移)。对应的删除方法分别是:void removeRow(Rowrow)//Remove a row from this sheet. All cells contained in the row ... -
POI操作EXCEL删除行
2019-01-10 09:05:47POI 操作表格删除行包含两种方法: 1. sheet.removeRow(Row row);(POI3.17 版本,试过POI3.8,有问题,POI4.0不支持java6与java7) 该方法主要用与清除行的内容,还保留行的位置 共用方法: /** * 从某行... -
Poi实现保护工作表后可新增与删除行
2020-12-29 11:14:31但又不希望用户看到锁定ID数据:考虑到用户直接复制行导致隐藏列被复制,从而将新增的数据变成更新数据,将隐藏的列放在第一行并锁定则不能复制删与增行:由于导入的数据存在合并行,用户编辑时会用到删除与新增行... -
Poi操作保护工作表后指定区域内删除行列
2015-11-28 16:38:43最近做的一个物流项目,其主要操作是处理上传和下载Excel文件的,主要用的第三方的Poi的jar包。前几天遇到个问题,纠结了好几天终于得以解决,现将过程记录下。作成结构相同的多sheet的Excel文件,其中根据业务要求... -
Java 删除Word表格/表格内容
2021-02-27 11:12:28本文介绍在 Java程序中如何删除Word表格(即将整个Table表格删除)和删除Word表格内容(即删除表格中的数据内容,这里也可以根据需要实现删除表格样式,表格单元格中的段落等)的方法。使用工具:Free Spire.Doc for ... -
java 使用poi实现对word指定位置合并、增加、行列、指定位置增加标签、标签增加内容。
2022-07-13 23:44:49使用poi增加word行和列填充数据、合并单元格。 -
poi 数据验证删除、修改;及使用shiftRow 合并乱的问题
2019-09-24 17:16:10写的过程中才发现poi的数据验证居然只能添加不能修改和删除,那我也就只能自己写修改和删除了;这里把我用到的方法整理了一下。 突然发现代码有些多,这里说一下思路,修改数据验证就是用反... -
java POI操作Excel HSSFSheet新增删除行
2021-02-01 03:17:591.java POI操作Excel HSSFSheet新增行在excel中点击右键-插入,就直接插入一行了,可是用java 网上方法都搞得很难,其实也是炒鸡简单的。HSSFWorkbookworkbook=newHSSFWorkbook(inputStream);HSSFSheetsheet=... -
POI 4.1.2 操作 Excel
2020-06-19 11:27:32POI 4.1.2 操作 Excel 1. POI 简介 POI(Poor Obfuscation Implementation),直译为“可怜的模糊实现”,利用POI接口可以通过 Java 操作 Microsoft office 套件工具的读写功能。POI支持office的所有版本。 POI 的 ...