如何让Excel单元格“正确”到其内容?

时间:2015-11-05 21:06:06

标签: c# excel office-interop xlsx excel-interop

我想要使用C#填充的Excel电子表格单元格进行扩展或收缩,以便显示所有内容而无需手动调整单元格的宽度 - 以“足够”的宽度显示以显示数据 - 不多也不少。

我试过了:

_xlSheet = (MSExcel.Excel.Worksheet)_xlSheets.Item[1];
_xlSheet.Columns.AutoFit();
_xlSheet.Rows.AutoFit();

...但它在我当前的项目中没有任何作用(它在一个不包含范围的小型POC沙盒应用程序中正常工作)。说到范围,这个不起作用的原因可能与我创建的单元格范围有关:

var rowRngMemberName = _xlSheet.Range[_xlSheet.Cells[1, 1], _xlSheet.Cells[1, 6]];
rowRngMemberName.Merge(Type.Missing);
rowRngMemberName.Font.Bold = true;
rowRngMemberName.Font.Italic = true;
rowRngMemberName.Font.Size = 20;
rowRngMemberName.Value2 = shortName;

...然后在此之后添加“普通”/通用单细胞值。

换句话说,我有跨越多列的值 - 几行。然后在下面,我恢复到“一个单元格,一个值”模式。

这是问题吗?

如果是,我该如何解决?

是否可以拥有电子表格的独立部分,其格式(自动调整)不受工作表其他部分的影响?

更新

至于获取多行以容纳值,我正在使用此代码:

private void AddDescription(String desc)
{
    int curDescriptionBottomRow = curDescriptionTopRow + 3;

    var range =
        _xlSheet.Range[_xlSheet.Cells[curDescriptionTopRow, 1], _xlSheet.Cells[curDescriptionBottomRow, 1]];
    range.Merge();

    range.Font.Bold = true;
    range.VerticalAlignment = XlVAlign.xlVAlignCenter;
    range.Value2 = desc;
}

......这就是它的成就:

enter image description here

2 个答案:

答案 0 :(得分:1)

毕竟,AutoFit是需要的,但关键是在正确的时间调用它 - 完成所有其他操作之后。否则,后续操作可能会失去自动操作性。

答案 1 :(得分:0)

如果我得到你正确的要求你正在寻找文字...至少那是官方用语......

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

以下是文档:https://msdn.microsoft.com/en-us/library/office/ff821514.aspx