[]
        
(Showing Draft Content)

测量字宽

如果要按像素获取或设置列宽,GcExcel 和 Excel 中的结果可能会有所不同,因为它们都按字符存储列宽。为了解决这个问题,GcExcel 支持测量字宽以计算单个字符宽度的精确像素值。

GcExcel 在其API中提供 IGraphicsInfo 接口,可以实现对单个数字的精确像素值的了解。 IGraphicsInfo接口中的 getDigitWidth 方法根据不同的字体属性(如字体系列、字体大小、字体样式等)测量文本(或字符)。GcExcel API还支持GUI框架,如WPF和Windows窗体。

请参阅以下示例代码,该代码在Excel中计算像素值并正确导出列宽。

public class FakeGraphicsInfo implements IGraphicsInfo {
    public double Width;
    public int GetDigitWidthCount;
    public double setWidth(double i) {
        return i;
    }
public double getWidth(double i) {
    return i;
}
@Override
public double getDigitWidth(TextFormatInfo textFormat) {
    GetDigitWidthCount++;
    return 1;
    }
}
        
        
// Create a new workbook
Workbook workbook = new Workbook();
// Create theme
Theme theme = new Theme("custom");
theme.getThemeFontScheme().getMajor().get(FontLanguageIndex.Latin).setName("YouthTouchDemoRegular");
theme.getThemeFontScheme().getMinor().get(FontLanguageIndex.Latin).setName("YouthTouchDemoRegular");
workbook.setTheme(theme);
// Get worksheet
IWorksheet sheet = workbook.getWorksheets().get(0);
FakeGraphicsInfo fakeGraphicsInfo = new FakeGraphicsInfo();
fakeGraphicsInfo.setWidth(8);
workbook.setGraphicsInfo(fakeGraphicsInfo);
sheet.setStandardWidthInPixel(20);
sheet.getColumns().get(0).setColumnWidthInPixel(20);
sheet.getRange(1, 1).setValue("abc");
// Save workbook
workbook.save("MeasureDigitalWidthAccurately.xlsx");

注意:

  • 上面的示例需要WinForms应用程序来构建和运行。

  • getDigitWidth方法的结果取决于环境。有时,它在不同的计算机上运行时返回不同的结果。