NPOI GetZoom的工作表

问题描述:

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

+0

如果装入您的现有工作,你知道有一个非默认缩放(例如75%),做出改变保存它,结果文件是否具有相同的缩放比例,或者是否将其重置为100%? –

+0

我还没有在代码中试过这个,但是如果你打开MS Excel,将你的缩放设置为非标准,保存文档并关闭它 - 然后 - 是的 - 下次打开它时,缩放仍然会记住你的非标准设置。 –

这不会是一个令人满意的答案,因为我不确定是否有答案。我查看了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); 
    } 
} 

在哪里,我们可以看到,它将此信息保存到一个私有字段的ISheetInternalSheet在Java):

private List<RecordBase> _records; 

因此,该信息是不能公开访问。如果缩放未设置,它默认为100%,但我不知道有什么方法可以访问现有工作表的缩放,因为似乎没有任何方法可以在NPOI中进行修改内部源代码自己。即使如此,这只会给你设置的缩放级别,而不是工作表上已有的缩放级别。

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

+0

您是否认为可以创建覆盖类方法来设置NPOI中的缩放? EPPlus非常适合XLSX,但它不能处理XLS。 –

+0

@DavidP问题是,我不知道你最初如何获得缩放,所以我不知道你会怎么写这样的方法。我认为缩放是保存在Excel工作表之外的某个地方,比如作为Windows设置或其他东西。抱歉,我无法提供更多帮助。 –

+0

我怀疑你错误地认为它存储在注册表项或Windows设置中。因为如果您在Excel中的工作表上设置自定义缩放,请关闭文件,将文件复制到新的命名文档,然后打开新命名的文档,它仍会记住自定义缩放。但根据您的意见,我确实找到了解决方案。见下文。 –

感谢C. Helling,我能够推断Zoom是存储在Window2中的。然而,它被存储为整数(例如,对于65%为65,对于150%为150)。设置基于关闭旧表的缩放新的工作表的缩放,非常的方便:

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

不错!我很高兴你明白了。 –