我正在使用Apache POI API编写一个Java工具,将XML转换为MS Excel.在我的XML输入中,我以磅为单位接收列宽.但Apache POI API有一个稍微奇怪的逻辑,用于根据字体大小等设置列宽(请参阅API文档)
是否存在将点转换为Excel预期宽度的公式?有没有人这样做过?
setRowHeightInPoints()
虽然有一种方法:(但没有列.
PS:输入XML是ExcelML格式,我必须转换为MS Excel.
使用公式的值时,我很难让列正确地自动调整大小.
我通过创建一个具有最大值作为常量字符串值的隐藏行来"解决"这个问题,但这远非优雅,并且通常需要评估每个单元格中的公式以获取生成的最大字符串.虽然这种小型电子表格适用于这种情况,但对于大约16列x~6000行的纸张来说,它变得非常不切实际.
以下代码在OpenOffice中呈现.
package com.shagie.poipoc;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
public class SimpleBug {
public static void main(String[] args) {
try {
Workbook wb = new HSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
Sheet sheet = wb.createSheet("new sheet");
Row row = sheet.createRow(0);
CellStyle style = wb.createCellStyle();
style.setDataFormat(wb.createDataFormat().getFormat("[h]:mm"));
Cell cell = row.createCell(0);
cell.setCellValue(123.12);
cell.setCellStyle(style);
row.createCell(1).setCellFormula("A1");
row.createCell(2)
.setCellFormula("TRUNC(A1) & \"d \" & TRUNC(24 * MOD(A1,1))" +
" & \"h \" & TRUNC(MOD(60 * 24 * MOD(A1,1),60)) & \"m\"");
row.createCell(3).setCellValue("foo");
for(int i = …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个程序,使用apache poi将信息写入excel文件.在我将所有数据输入文件后,我在文件的每一列上调用autoSizeColumn方法.但它会将列调整为输入的最后一个单元格的宽度,这有时不会像列中的其他单元格那么大.我知道我正在使用它,不幸的是我现在没有互联网发布任何代码,但我会尽快更新.
好的,我希望我正在使用代码标签,但在这里它是:
public void writeFile() {
Workbook wb = new HSSFWorkbook();
Sheet s = wb.createSheet();
try {
FileOutputStream out = new FileOutputStream(
this.getSelectedFile());
// create a new workbook
// create a new sheet
// declare a row object reference
Row r = null;
// declare a cell object reference
Cell c = null;
// in case of plain ascii
wb.setSheetName(0, "Street Light Report");
// create a sheet with 30 rows (0-29)
// int rownum;
// short rownum;
// PrintWriter …
Run Code Online (Sandbox Code Playgroud) {
row=sheet.createRow(0);
cell=row.createCell(0);
cell.setCellValue("header");
cell=row.createCell(1);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,1));
row=sheet.createRow(1);
cell=row.createCell(0);
cell.setCellValue("Keys");
cell=row.createCell(1);
cell=row.setCellValue("Values");
row=sheet.createRow(2);
cell=row.createCell(0);
cell.setCellValue("No data");
cell=row.createCell(1);
sheet.addMergedRegion(new CellRangeAddress(1,1,0,1);
sheet.autoSizeColumn(0);
}
Run Code Online (Sandbox Code Playgroud)
当我合并两行第0行时,autosize正在工作,但在合并第二行的两列后,自动调整大小不起作用..提前感谢...
我编写了生成excel的模块,并在Servicemix下部署了它.在Windows环境中一切都很好,但在Linux Servicemix下意外崩溃后跟随调用:
for (short i=0;i<=3;i++) {
log.trace("AutoSize column {}", i);
worksheet.autoSizeColumn(i);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用POI版本4.2-FINAL,FuseESB 4.2,Java 5.0.但是,没有hs_err*.pid文件.Servicemix日志在第一次autoSizeColumn调用结束.
有没有人遇到过这种行为并且知道它是如何引起的以及如何绕过这个?
我正在使用apache poi创建一个excel文件,生成excel但我无法根据单元格值调整列我发布代码到目前为止我所做的
这就是我在excel中创建标题的方法
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
sheet.protectSheet("password");
sheet.autoSizeColumn(15);
HSSFFont hSSFFont = wb.createFont();
hSSFFont.setFontName(HSSFFont.FONT_ARIAL);
hSSFFont.setFontHeightInPoints((short) 8);
CellStyle style = wb.createCellStyle();
/* cell style for locking */
CellStyle lockedCellStyle = wb.createCellStyle();
lockedCellStyle.setLocked(true);
HSSFRow row = null;
HSSFCell cell = null;
row = sheet.createRow(0);
int headercolumnNo = 0;
//1st Column Header for Indicator
cell = row.createCell(headercolumnNo);
cell.setCellValue(new HSSFRichTextString(listOfActiveCarrierUserHeader.get(0)));
style.setWrapText(true);
style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
style.setFont(hSSFFont);
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
cell.setCellStyle(style);
headercolumnNo = 1;
cell = row.createCell(headercolumnNo); //2nd Column Header for Firstname
cell.setCellValue(new HSSFRichTextString(listOfActiveCarrierUserHeader.get(1)));
style.setWrapText(true); …
Run Code Online (Sandbox Code Playgroud)