使用C#和VSTO设置Excel中所有单元格的格式而不进行选择

时间:2016-02-23 13:15:56

标签: c# excel format vsto cell

假设我想在Excel工作表中为所有单元格设置格式(“文本”,“数字”,“百分比”,“日期”等)

我现在如何设置单行或单列的格式。例如,为第3行的所有单元格设置“Percent”格式的代码如下所示(小数分隔符取决于您的Windows本地化):

exitWin()

但是,当我尝试使用以下代码对工作表的所有单元格执行相同操作时:

this.worksheet.Rows[3].NumberFormat = "%0,00";

,我遇到了一个问题 - 实际上,单元格的格式会被更改但格式有些错误(在目前的情况下,实际的格式将是“#000%” ,被Excel识别为“自定义格式”)。

我知道如何使用选择来解决这个问题。因此,以下代码完美地执行上述任务:

this.worksheet.Cells.NumberFormat = "%0,00";
但是,我真的想在没有选择的情况下解决这个问题。 我该怎么做?

2 个答案:

答案 0 :(得分:0)

虽然我发现你对那些试图帮助你非常冒犯的人做出回应,但我还是试着忽略这一点,要记住我们试图在这里互相帮助,专注于为场景寻找解决方案。

所以这是我最后一次取悦你的尝试......

[TestMethod]
public void TestExcelNumberFormatOnWholeSheet()
{
    Excel.Application excel = new Excel.Application();
    excel.Visible = true;

    Excel.Workbook workbook1 = excel.Workbooks.Add();
    Excel.Worksheet sheet = workbook1.Sheets.Add();

    var lastCol = sheet.Range["a1"].End[Excel.XlDirection.xlToRight].Column;
    var lastRow = sheet.Cells[65536, lastCol].End[Excel.XlDirection.xlDown].Row;

    sheet.Range["a1", sheet.Cells[lastRow, lastCol]].NumberFormat = "%0,00";
}

我在这里进行了测试并且似乎有效(请记住,正如您已经提到的,您可能需要根据您的本地化来切换小数字符。)

答案 1 :(得分:0)

让我回答我自己的问题。

如果很快,而不是代码

this.worksheet.Cells.NumberFormat = "%0,00";

,应该使用以下一个:

((dynamic)this.worksheet.Cells).NumberFormat = "%0,00";

然后,结果格式是正确的!

现在,我对此的解释是:NumberFormat属性看起来正确仅适用于dynamic类型,但不适用于Microsoft.Office.Interop.Excel.Range类型。当人们写this.worksheet.Cellsthis.worksheet.Range["A1", "C3"]之类的内容时,他/她会获得Microsoft.Office.Interop.Excel.Range类型;当一个人写this.worksheet.Rows[3]之类的内容时,他/她会获得dynamic类型。因此,要使用NumberFormat属性,只需将Microsoft.Office.Interop.Excel.Range对象转换为dynamic对象!