Java 如何使用Apache POI制作verticaltext cellstyle?
最近,我遇到了一个问题: 我需要用java导出excel(xlsx),它必须包含这种单元格样式: 我用这个垂直文本制作了一个excel文件,并导出为xml文件。然后我发现该样式有一个名为“VerticalText”的属性: 根据经验,我选择了ApachePOI。但是我找不到任何方法用POI生成单元格样式。我只能找到旋转法,不能满足要求 因此,我阅读了更多POI代码,发现cellstyles是从一些xsb文件构建的,这些文件也不包含垂直文本Java 如何使用Apache POI制作verticaltext cellstyle?,java,excel,apache-poi,Java,Excel,Apache Poi,最近,我遇到了一个问题: 我需要用java导出excel(xlsx),它必须包含这种单元格样式: 我用这个垂直文本制作了一个excel文件,并导出为xml文件。然后我发现该样式有一个名为“VerticalText”的属性: 根据经验,我选择了ApachePOI。但是我找不到任何方法用POI生成单元格样式。我只能找到旋转法,不能满足要求 因此,我阅读了更多POI代码,发现cellstyles是从一些xsb文件构建的,这些文件也不包含垂直文本 非常感谢您的帮助。图片中的XML是Excel 200
非常感谢您的帮助。图片中的XML是Excel 2003 SpreadsheetML。但是
*.xlsx
文件是包含Office Open XML文件的ZIP存档。在该ZIP存档中,style.xml
包含:
...
<cellXfs count="2">
...
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0">
<alignment textRotation="255"/>
</xf>
</cellXfs>
...
由于Office Open XML格式(如
*.xlsx
)是包含XML文件的ZIP存档,因此很容易确定必要的XML属性。只需使用Excel
GUI创建一个简单的*.xlsx
文件,该文件具有所需的格式。然后解压缩*.xlsx
文件并查看xl/styles.xml
我以前尝试过setRotation(90),但没有满足要求。为什么是255?太神奇了!!请参阅我的补充资料,了解如何确定必要的XML属性。
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class CreateXSSFVerticalText {
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setRotation((short)255);
Sheet sheet = workbook.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("test");
cell.setCellStyle(cellStyle);
FileOutputStream fileOut = new FileOutputStream("CreateXSSFVerticalText.xlsx");
workbook.write(fileOut);
fileOut.close();
workbook.close();
}
}