我收到了许多从第三方数据库自动生成的Word文档。大多数(如果不是全部)内容都在表格中。问题是在许多单元格中,由于溢出,文本不完全可见。列宽和行高用绝对值设置。列宽不能更改。如果存在溢出,则应更改行高以允许文本在更多行上运行。
我的问题是:是否有可能找到这种情况下的单元格,只有这些行才能将高度设置为wdRowHeightAuto。
我尝试将所有行更改为自动高度,但这确实会让布局变得混乱。
我现在正在考虑以下方法,但我真的很想知道是否有更简单的方法。
任何帮助VBA或c#都将不胜感激!
这就是我所处的位置,但由于列宽不同,我因访问单个列无法访问而遇到运行时错误。由于存在合并的单元格,因此也无法访问单个行。
app = new Word.Application();
foreach (var file in inputFiles)
{
var doc = app.Documents.Open(file);
foreach (var table in doc.Tables)
{
foreach (var column in table.Columns)
{
try
{
foreach (var cell in column.Cells)
{
cell.FitText = true;
bool textIsScaled = false;
if (cell.Range.Font.Scaling != 100)
textIsScaled = true;
cell.FitText = false;
if (textIsScaled)
cell.HeightRule = WdRowHeightRule.wdRowHeightAuto;
}
}
catch (Exception)
{
continue;
}
}
}
doc.Save();
doc.Close();
}
答案 0 :(得分:1)
我找到了一个解决方案,感谢Jean-Pierre Oosthuizen提出的使用wdRowHeightAtLeast的建议。即使使用Range.Cells无法访问个别行(由于垂直合并的单元格),您也可以访问单个单元格。
我将当前行高调为wdRowHeightAtLeast的最小值,以确保如果文本适合单元格,则不会更改布局。
foreach (var table in doc.Tables)
{
table.Rows.AllowBreakAcrossPages = 0;
var cells = table.Range.Cells;
foreach (var cell in cells)
{
try
{
cell.SetHeight(cell.Height, WdRowHeightRule.wdRowHeightAtLeast);
}
catch (Exception ex)
{
Logger.LogError(ex);
continue;
}
}
}