web-dev-qa-db-ja.com

ClosedXmlを使用してExcelで数式セルのテキストを折り返す方法

問題は、セルに長い文字列を持つセルを参照する数式が含まれている場合、セルの内容がラップされないことです。

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();です。しかし、これも機能しませんでした(特定の列の内容を調整することもできませんでした)。

8
horgh

コンテンツに調整を適用する代わりに、次のようにラップテキストを適用できます。

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;
11
Smit Patel

私はこれを使います

 xlWorkSheet.Range["A4:A4"].Cells.WrapText = true;
8
Moayad Myro

同じCodeplexページで、ライブラリの作成者は次のように述べていることにも注意してください。

これは理解するのに少し時間がかかりました。

別のセルを指すセルに折り返しテキストを設定すると、Excelは実際に不正行為を行っています。必要な高さを計算してから、行の高さプロパティを設定します。これは私がここでできないことです。

あなたはなしでやらなければならないでしょう。

私にとって、これはこの機能が不可能であることを意味します。

0
Francois Botha

申し訳ありませんが、まだコメントを書くことができません... 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プロパティと互換性がありません。

0
bubi

SetWrapText();は私のために働いた

0
Ali Nouman