問題は、セルに長い文字列を持つセルを参照する数式が含まれている場合、セルの内容がラップされないことです。
CodePlex この問題に関するスレッドと、問題を確認するための簡単なコードを見つけました。
_var generated = new XLWorkbook();
var workSheet = generated.AddWorksheet("Test");
workSheet.Cell("B1").Style.Alignment.WrapText = true;
workSheet.Cell("B1").Value = "hello hello hello hello hello";
workSheet.Cell("A3").FormulaA1 = "B1";
workSheet.Cell("A3").Style.Alignment.WrapText = true;
generated.SaveAs("Generated.xlsx");
_
また、セルを折り返す代わりに、行の高さを手動で設定しようとしました。
_workSheet.Row(3).Height = workSheet.Row(1).Height;
_
しかし、成功することもありません。
これについて私にできることはありますか?
Peter Albertのコメントに続いて、セット行のAutoFit
を作成しようとしました。 ClosedXMLでこれを行うために私が見つけた唯一のことはworkSheet.Row(3).AdjustToContent();
です。しかし、これも機能しませんでした(特定の列の内容を調整することもできませんでした)。
コンテンツに調整を適用する代わりに、次のようにラップテキストを適用できます。
var generated = new XLWorkbook();
var workSheet = generated.AddWorksheet("Test");
worksheet.Cell(3, 2).Value = "Hello Hello Hello Hello Hello Hello Name";
worksheet.Cell(3, 2).Style.Alignment.WrapText = true;
また、両方を適用する場合は、AdjustToContentsの後に使用してください。
var generated = new XLWorkbook();
var workSheet = generated.AddWorksheet("Test");
worksheet.Columns(2, 20).AdjustToContents();
worksheet.Cell(3, 2).Value = "Hello Hello Hello Hello Hello Hello Name";
worksheet.Cell(3, 2).Style.Alignment.WrapText = true;
私はこれを使います
xlWorkSheet.Range["A4:A4"].Cells.WrapText = true;
同じCodeplexページで、ライブラリの作成者は次のように述べていることにも注意してください。
これは理解するのに少し時間がかかりました。
別のセルを指すセルに折り返しテキストを設定すると、Excelは実際に不正行為を行っています。必要な高さを計算してから、行の高さプロパティを設定します。これは私がここでできないことです。
あなたはなしでやらなければならないでしょう。
私にとって、これはこの機能が不可能であることを意味します。
申し訳ありませんが、まだコメントを書くことができません... AutoFitはClosedXMLのプロパティではありません。 AdjustToContentsについて、私のバージョン(2014年7月26日、0.72.3だと思います)では、WordWrapプロパティ(長い行を分割する)を無視します。これがメインチェックです
if (c.HasRichText || textRotation != 0 || c.InnerText.Contains(Environment.NewLine))
{
// omissis...
}
else
thisHeight = c.Style.Font.GetHeight( fontCache);
この実装では、自動折り返しのためにセルが複数行の場合、正確な高さは無視されます。そのため、AdjustToContents + AutoWrapは機能しません。コンテンツのサイズの高さを設定する必要がある場合は、AdjustToContentsを呼び出さないようにする必要があります。この動作は、XLIsAutoHeightプロパティと互換性がありません。
SetWrapText();
は私のために働いた