如何使用ClosedXml使公式单元格中的Excel换行文本

问题描述 投票:7回答:5

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

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

c# excel closedxml
5个回答
9
投票

您可以像这样应用Wraptext,而不是应用Adjust to Contents

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;

8
投票

我用这个

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

0
投票

对不起,我还是不能写评论... 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。此行为与XL IsAutoHeight属性不兼容。


0
投票

另请注意,在同一个Codeplex页面上,库的作者声明:

这个花了一段时间才弄明白。

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

你不得不这样做。

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


0
投票

SetWrapText();为我工作

© www.soinside.com 2019 - 2024. All rights reserved.