为什么不能'使用Apache POI(3.16)'正确'隐藏Excel行?可以调用(XSSFRow)row.setZeroHeight(),这也是Busy developer's guide推荐的内容。但是,这与Excel做它的方式不同。您可以使用相应的上下文菜单选项“隐藏”和“取消隐藏”行。为什么不能使用Apache POI'正确'隐藏Excel行?
我认为设置行风格应该可行,但事实并非如此。在生成的Excel文件中,行仍然可以看到。
package de.mwe;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.Assert;
import org.testng.annotations.Test;
public class MWE {
@Test
public void testHidingRows() {
final XSSFWorkbook wb = new XSSFWorkbook();
String sname = "HideRowsTestSheet", cname = "TestName", cvalue = "TestVal";
XSSFSheet sheet = wb.createSheet(sname);
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell((short) 0);
cell.setCellValue(cvalue);
XSSFCellStyle hiddenRowStyle = wb.createCellStyle();
hiddenRowStyle.setHidden(true);
row.setRowStyle(hiddenRowStyle);
Assert.assertTrue(row.getRowStyle().getHidden());
try (FileOutputStream fileOut = new FileOutputStream(new File("target/PoiTestDrive.xlsx"))) {
wb.write(fileOut);
} catch (IOException ex) {
ex.printStackTrace();
}
// does not work, resulting Excel file shows first row.
}
}
因为setHidden为细胞而不是行? – 2017-09-13 11:16:44
[如何在Java中使用Apache Poi取消隐藏隐藏行](https://stackoverflow.com/questions/6923153/how-to-un-hide-a-hidden-row-in -excel-using-apache-poi-in-java) – Nikolas
[Hiding and Un-Hiding Rows](http://poi.apache.org/spreadsheet/quick-guide.html#Hiding)是正确的,但必须是'row.setZeroHeight(true);'用于隐藏一行。 [Row.setZeroHeigh](https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Row.html#setZeroHeight(布尔值))确实是Excel在隐藏行时所做的。对于'XSSF'只需设置隐藏属性,请参阅https://svn.apache.org/viewvc/poi/tags/REL_3_16_FINAL/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java?view =标记#l423 –