16

问题是单元格内容没有被包装,当该单元格包含一个引用具有一些长字符串的单元格的公式时。

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();. 但这也不起作用(既不调整某些列的内容)。

4

6 回答 6

22

您可以像这样应用 Wraptext 而不是将调整应用于内容

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;
于 2015-10-09T06:12:18.970 回答
8

我用这个

 xlWorkSheet.Range["A4:A4"].Cells.WrapText = true;
于 2015-02-05T13:39:49.350 回答
0

抱歉,我仍然不能写评论... AutoFit 不是 ClosedXML 的属性。关于 AdjustToContents,在我的版本(26/07/2014,我认为 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 的内容的高度大小。此行为与 XL IsAutoHeight 属性不兼容。

于 2014-07-26T12:52:49.110 回答
0

找到以下解决方案(仅限 excel):

  1. row.Cells("start cell : end cell").Style.Alignment.SetWrapText(true)为所有使用的单元格设置

  2. 我用以下文本编写了一个 VBA 宏:( Range("A" & Row & ":N" & Row).EntireRow.AutoFit对于行) Range("A" & Row & ":N" & Row).EntireColumn.AutoFit(对于列)

  3. 指定它在文档启动时运行

于 2021-09-22T10:03:05.473 回答
0

另请注意,在同一个 Codeplex 页面上,该库的作者指出:

这个花了一段时间才弄清楚。

当您在指向另一个单元格的单元格上设置换行文本时,Excel 实际上是在作弊。它计算所需的高度,然后设置行高属性。这是我在这里做不到的。

你将不得不这样做。

对我来说,这意味着这个功能是不可能的。

于 2017-09-26T08:55:06.973 回答
0

SetWrapText();为我工作

于 2018-09-12T13:00:56.167 回答