我正在使用Apache POI API將Java工具編寫爲將XML轉換爲MS Excel的工具。在我的XML輸入中,我以磅爲單位獲得列寬。但是,Apache POI API有一個基於字體大小等設置列寬的邏輯有點奇怪(參考API docs)在Apache POI中設置列寬
是否有一個公式可以將Excel轉換爲寬度的公式?有沒有人做過這個? 。
有一個setRowHeightInPoints()
方法雖然:(但沒有列
PS:輸入XML是ExcelML格式,我必須轉換到MS Excel
我正在使用Apache POI API將Java工具編寫爲將XML轉換爲MS Excel的工具。在我的XML輸入中,我以磅爲單位獲得列寬。但是,Apache POI API有一個基於字體大小等設置列寬的邏輯有點奇怪(參考API docs)在Apache POI中設置列寬
是否有一個公式可以將Excel轉換爲寬度的公式?有沒有人做過這個? 。
有一個setRowHeightInPoints()
方法雖然:(但沒有列
PS:輸入XML是ExcelML格式,我必須轉換到MS Excel
不幸的是,只有功能setColumnWidth(int columnIndex, int width)。從class Sheet
;其中寬度是標準字體中的字符數(工作簿中的第一個字體)如果字體發生變化,則不能使用它 下面解釋瞭如何計算字體大小的寬度。公式是:
width = Truncate([{NumOfVisibleChar} * {MaxDigitWidth} + {5PixelPadding}]/{MaxDigitWidth}*256)/256
您可以在Sheet
輸入數據後,始終使用autoSizeColumn(int column, boolean useMergedCells)
。
希望它有幫助。
您也可以使用本博客中提到的util方法:Getting cell witdth and height from excel with Apache POI。它可以解決你的問題。
複製從博客&貼:
public class PixelUtil {
public static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
public static final short EXCEL_ROW_HEIGHT_FACTOR = 20;
public static final int UNIT_OFFSET_LENGTH = 7;
public static final int[] UNIT_OFFSET_MAP = new int[] { 0, 36, 73, 109, 146, 182, 219 };
public static short pixel2WidthUnits(int pxs) {
short widthUnits = (short) (EXCEL_COLUMN_WIDTH_FACTOR * (pxs/UNIT_OFFSET_LENGTH));
widthUnits += UNIT_OFFSET_MAP[(pxs % UNIT_OFFSET_LENGTH)];
return widthUnits;
}
public static int widthUnits2Pixel(short widthUnits) {
int pixels = (widthUnits/EXCEL_COLUMN_WIDTH_FACTOR) * UNIT_OFFSET_LENGTH;
int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
pixels += Math.floor((float) offsetWidthUnits/((float) EXCEL_COLUMN_WIDTH_FACTOR/UNIT_OFFSET_LENGTH));
return pixels;
}
public static int heightUnits2Pixel(short heightUnits) {
int pixels = (heightUnits/EXCEL_ROW_HEIGHT_FACTOR);
int offsetWidthUnits = heightUnits % EXCEL_ROW_HEIGHT_FACTOR;
pixels += Math.floor((float) offsetWidthUnits/((float) EXCEL_ROW_HEIGHT_FACTOR/UNIT_OFFSET_LENGTH));
return pixels;
}
}
所以,當你想獲得細胞的寬度和高度,你可以使用這個在像素中獲取價值,值approximatelly。
PixelUtil.heightUnits2Pixel((short) row.getHeight())
PixelUtil.widthUnits2Pixel((short) sh.getColumnWidth(columnIndex));
在我的代碼中使用這個和是它的偉大工程。 – 2017-08-16 14:15:28
請小心使用autoSizeColumn()
。它可以在小文件沒有問題的情況下使用,但請注意,每個列僅調用一次(在結尾處)該方法,而不是在沒有意義的循環內調用。
請避免在大型Excel文件中使用autoSizeColumn()
。該方法會產生性能問題。
我們在110k行/ 11列文件上使用它。該方法花費約6米自動化所有列。
+1 autoSizeColumn – Nasir 2013-06-07 15:29:52
thnx..it工作 – 2013-06-27 11:49:55