Java 如何使用Apache POI制作verticaltext cellstyle?

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

最近,我遇到了一个问题: 我需要用java导出excel(xlsx),它必须包含这种单元格样式:

我用这个垂直文本制作了一个excel文件,并导出为xml文件。然后我发现该样式有一个名为“VerticalText”的属性:

根据经验,我选择了ApachePOI。但是我找不到任何方法用POI生成单元格样式。我只能找到旋转法,不能满足要求

因此,我阅读了更多POI代码,发现cellstyles是从一些xsb文件构建的,这些文件也不包含垂直文本


非常感谢您的帮助。

图片中的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();
 }
}