約 6 か月前に実装を構築していたので、実際に SpreadsheetGear サポートにこれについて尋ねました。b/c 彼らの AutoFit() が正確に適合していないこと、自動サイズ変更後に各列に「ファッジ ファクター」を追加する必要があることを述べました。サポートの回答は基本的に、Excel との既知の不一致であり、バグとして分類されていないというものでした。彼らが私に言わなければならなかったことは次のとおりです。
SpreadsheetGear と Excel の間で列の自動調整がわずかにずれている理由は、.NET および GDI+ によって提供されるフォント メトリックが Excel で使用されるものと異なるためです。列のサイズはワークブックで使用されているフォント、つまりフォント メトリックに関連付けられているため、残念ながら Excel と正確に一致させることはできません。Excel と一致するように最善を尽くしますが、すべての場合に完全に一致させることは不可能です。
興味深いことに、Excel は実際には、フォント メトリックの計算とかなり矛盾しています。SpreadsheetGear を使用して、セルに 40 ~ 50 個の「a」文字を追加して、長いテキストを含むワークブックを作成してみてください。そのワークブックをディスクに保存し、Excel 2007 または 2010 で開きます。右下隅にあるズーム スライダーを使用して、さまざまなポイントでズームインおよびズームアウトします。テキストが列幅に対してかなりシフトすることに注意してください。SpreadsheetGear は、このタイプのシナリオとより一貫性があります。
とにかく、列幅に少し「ごまかし要因」を追加する方法は、私たちが提案できる最善の回避策です. これは「ハック」ですが、2 つの異なる環境と Excel 自体の一貫性のないメトリックを扱っているため、改善するためにできることは何もありません。
そして、必要に応じて列を広げるために使用した「ファッジファクター」は次のとおりです。
ws.UsedRange.Columns.AutoFit()
For col As Integer = 0 To ws.UsedRange.ColumnCount - 1
ws.Cells(1, col).ColumnWidth *= 1.
Next
C# の場合
ws.UsedRange.Columns.AutoFit()
for (int col = 0; col < ws.UsedRange.ColumnCount; col++)
ws.Cells[1, col].ColumnWidth *= 1.15;