2017-09-15 25 views
1

私はXLSXは、OpenXMLのSDKを使用してファイルと私はにカスタム列幅を指定しています作成しています:カスタム列幅

using (SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create("Book1.xlsx", SpreadsheetDocumentType.Workbook)) 
{ 
    WorkbookPart workbookPart = spreadsheet.AddWorkbookPart(); 
    workbookPart.Workbook = new Workbook(); 

    WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); 
    worksheetPart.Worksheet = new Worksheet(); 

    spreadsheet.WorkbookPart.Workbook.AppendChild<Sheets>(
     new Sheets(
      new Sheet() { Id = spreadsheet.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" })); 

    worksheetPart.Worksheet.Append(
     new Columns(
      new Column() { Min = 1, Max = 1, Width = 15, CustomWidth = true }), 
     new SheetData()); 

    workbookPart.Workbook.Save(); 
} 

しかし、私が得られた「BOOK1を開きます.xlsx形式」MS Excelでファイルおよび列の値をチェックし、それは示す:

幅:14.29(105ピクセル)また

、IセットMS Excelと列の値:

幅:15(110個のピクセル)

そして、私は〜15.711を得るのOpenXML SDKでその値を読み取ります。
質問がなぜ違うのですか?

+0

私はこれについて、いくつかの質問を読みました。これはSDKのバグのようです。私はまだこの問題の解決策を見つけていません – Zac

+0

私はそれらをチェックアウトできるようにそれらのクエリのいくつかに私にリンクを送ることができますか?私はそれらを見つけることができませんでした、私は列の幅を定義し、オートフィットに関連する投稿だけを参照してください。また、内部的にXLSXファイルに正しい値(15)が格納されているため、SDKのバグかMS Excelのバグかどうかはわかりませんが、MS Excelはその値を若干増やして(〜15.711) 。だから私にとっては、これはMS Excelのバグと思われます。 – NixonUposseen

答えて

1

差異は、MS Excelが列幅を計算しているときに考慮されるいくつかの変数のために発生する可能性があります(ロード時および変更時にこれを行います)。標準スタイルのフォント設定、マシンのDPI設定、MS Excelのルーラ単位など

JimSnyderによって提供される式に関して、MS Excelは標準で指定されているものとはわずかに異なる列幅の計算を行います。 here

1

これはビンセント・タン氏の著書SpreadsheetOpenXmlFromScratchからさ:

// This is taken from the documentation for Column.Width in help file for Open XML SDK 
// Truncate([{Number of Characters} * {Maximum Digit Width} + {5 pixel padding}]/{Maximum Digit Width} * 256)/256 
fTruncWidth = Math.Truncate((sILT.ToCharArray().Count() * fMaxDigitWidth + 5.0)/fMaxDigitWidth * 256.0)/256.0; 

式は、あなたが必要幅を与える必要があります。それがなぜ違うのかについては、フォントポイントをウィンドウピクセルに変換するのがベストだと思います。