私はEPPlusとC#を使用しており、行の高さを自動サイズ調整/自動調整して、テキストの折り返しで結合されたセルのすべてのコンテンツを表示するために必要な高さに対応しようとしています。ただし、何を試してもテキストは常に切り捨てられます。さまざまなワークシートでさまざまなテキストサイズを使用してこのプロセスを繰り返しているため、行の高さをハードコーディングしたくありません(行の最小の高さを強制する場合を除く)。可能であれば、EPPlus/C#内でこれを実行します。
セルA2:E2がマージされ、WrapText = trueの場合:
テキストが切り捨てられたセル
これは、希望のセルの高さでどのように見えるかです
これが私の関連する短いC#コードです
Int32 intToCol;
intToCol = 5;
eppWorksheet.Cells[2, 1, 2, intToCol].Merge = true;
eppWorksheet.Cells[2, 1].Style.WrapText = true;
//Check if at the minimum height. If not, resize the row
if (eppWorksheet.Row(2).Height < 35.25)
{
eppWorksheet.Row(2).Height = 35.25;
}
私は EPPlusの行の自動調整 を確認しましたが、間違って読んでいない限り、質問に直接答えることはできませんでした。
これは、再利用可能なメソッドでの解決策です。テキスト値、セルに使用されるフォント、結合された列の合計幅を渡し、行の高さを受け取ります。結果で行の高さを設定します。
メソッドの使用
eppWorksheet.Row(2).Height = MeasureTextHeight(cell.Value, cell.Style.Font, [enter the SUM of column widths A-E]);
再利用可能な方法
public double MeasureTextHeight(string text, ExcelFont font, int width)
{
if (string.IsNullOrEmpty(text)) return 0.0;
var bitmap = new Bitmap(1, 1);
var graphics = Graphics.FromImage(bitmap);
var pixelWidth = Convert.ToInt32(width * 7.5); //7.5 pixels per Excel column width
var drawingFont = new Font(font.Name, font.Size);
var size = graphics.MeasureString(text, drawingFont, pixelWidth);
//72 DPI and 96 points per inch. Excel height in points with max of 409 per Excel requirements.
return Math.Min(Convert.ToDouble(size.Height) * 72 / 96, 409);
}
私はこれに回避策を使用し、印刷領域A:Qを使用しました。
短所:データが重複しています。しかし、レポートは印刷されており、Zカラムは印刷されていないため、問題ありません。
長所:行の高さは計算方法とは異なり正しく機能します。
戻り行で乗算係数を削除して、コードを少し調整する必要がありました。列の幅を取得するためにこのコードを使用しているためと考えられます。
ws1.Column(colIndx).Width * 7
乗算係数は、マージされる列の数です。