NPOI GetZoom of Worksheet

时间:2017-09-08 17:28:30

标签: c# apache-poi npoi

我正在使用NPOI库来读取现有工作簿,并创建一个新工作簿。创建HSSFSheet时。我看到有一种名为SetZoom的方法。我没有看到的是GetZoom方法或Zoom属性,以便告诉现有工作表上的缩放级别。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这不是一个令人满意的答案,因为我不确定是否有一个。我查看了NPOI源代码(SetZoom() in line 1161)以及从中移植的原始java源代码(SetZoom() in line 1083)。如您所见,SetZoom()方法只创建了SCLRecord

SCLRecord sclRecord = new SCLRecord();
          sclRecord.Numerator = ((short)numerator);
          sclRecord.Denominator = ((short)denominator);
          Sheet.SetSCLRecord(sclRecord);

进一步挖掘(在原始java中):

public void setSCLRecord(SCLRecord sclRecord) {
    int oldRecordLoc = findFirstRecordLocBySid(SCLRecord.sid);
    if (oldRecordLoc == -1) {
        // Insert it after the window record
        int windowRecordLoc = findFirstRecordLocBySid(WindowTwoRecord.sid);
        _records.add(windowRecordLoc+1, sclRecord);
    } else {
        _records.set(oldRecordLoc, sclRecord);
    }
}

我们可以看到它将此信息保存到ISheet(java中的InternalSheet)的私有字段中:

private List<RecordBase> _records;

因此,此信息无法公开访问。如果未设置缩放,则默认为100%,但我不知道有任何方法可以访问现有工作表的缩放,因为在NPOI中似乎没有任何方法可以执行此操作,只需修改内部源代码自己。即便如此,这只会为您提供您设置的缩放级别,而不是工作表上已有的缩放级别。

如果您访问worksheet.View.ZoomScale,可能在EPPlus中可能,但我目前无法对此进行测试。

答案 1 :(得分:1)

感谢C. Helling,我能够推断出Zoom已存储在Window2中。然而,它存储为整数(例如,65%为65%,150%为150%)。根据旧工作表的缩放设置新工作表的缩放非常简单:

destWS.SetZoom(sourceWS.Sheet.WindowTwo.NormalZoom, 100)