2017-09-08 15 views
0

NPOIライブラリを使用して既存のブックを読み込み、新しいブックを作成しています。 HSSFSheetを作成するとき。 SetZoomというメソッドがあることがわかります。私が見ていないのは、ズームレベルが既存のワークシートにあるかどうかを知るために、GetZoomメソッドまたはZoomプロパティです。何か案は?ワークシートのNPOI GetZoom

+0

既定以外のズーム(たとえば75%)があることがわかっている既存のワークシートを読み込む場合は、変更を加えて、新しいワークシートのズームを設定してください。保存するか、結果のファイルに同じズームが適用されるか、または100%にリセットされますか? –

+0

私はこのコードで試したことはありませんが、MS Excelを開いて、ズームを非標準に設定し、ドキュメントを保存して閉じます - 次に - はい - 次回開くときは、ズームはまだ覚えていますあなたの非標準設定。 –

答えて

1

私はそこに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); 
    } 
} 

(JavaでInternalSheetISheetの:

private List<RecordBase> _records; 

したがって、この情報は公にアクセスすることはできません。ズームが設定されていない場合、デフォルトは100%ですが、既存のシートのズームにアクセスする方法は認識されていません。NPOIでこれを行う方法はないと思われます内部ソースコードそれでも、ワークシート上の既存のズームレベルとは対照的に、これは設定したズームレベルのみを提供します。

worksheet.View.ZoomScaleにアクセスするとEPPlusで可能かもしれませんが、現時点では現在テストできません。

+0

NPOIでズームを設定して取得するオーバーライドクラスメソッドを作成することは可能でしょうか? EPPlusはXLSXには最適ですが、XLSは処理しません。 –

+0

@DavidP問題は、どのように最初にズームを得ることができないのか、私はあなたがそのような方法を書く方法を知らないということです。私は、ズームはWindowsの設定や何かのようにExcelシートの外に保存されていると思う。申し訳ありませんが、私はもっと助けになることはできませんでした。 –

+0

レジストリキーまたはWindowsの設定に格納されていると誤っていると思われました。 Excelのワークシートにカスタムズームを設定してファイルを閉じ、ファイルを新しい名前付きドキュメントにコピーして、新しく名前を付けたドキュメントを開くと、カスタムズームがまだ記憶されているためです。しかし、あなたの意見に基づいて、私は解決策を見つけました。下記参照。 –

1

C.ヘリングのおかげで、ズームがウィンドウ2に保存されていると推測できました。ただし、整数として格納されます(65%は65、150%は150など)。

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

ニース!私はあなたがそれを理解してうれしいです。 –

関連する問題