假设我想在Excel工作表中为所有单元格设置格式(“文本”,“数字”,“百分比”,“日期”等)。
我现在如何设置单行或单列的格式。例如,为第3行的所有单元格设置“Percent”格式的代码如下所示(小数分隔符取决于您的Windows本地化):
exitWin()
但是,当我尝试使用以下代码对工作表的所有单元格执行相同操作时:
this.worksheet.Rows[3].NumberFormat = "%0,00";
,我遇到了一个问题 - 实际上,单元格的格式会被更改但格式有些错误(在目前的情况下,实际的格式将是“#000%” ,被Excel识别为“自定义格式”)。
我知道如何使用选择来解决这个问题。因此,以下代码完美地执行上述任务:
this.worksheet.Cells.NumberFormat = "%0,00";
但是,我真的想在没有选择的情况下解决这个问题。 我该怎么做?
答案 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.Cells
或this.worksheet.Range["A1", "C3"]
之类的内容时,他/她会获得Microsoft.Office.Interop.Excel.Range
类型;当一个人写this.worksheet.Rows[3]
之类的内容时,他/她会获得dynamic
类型。因此,要使用NumberFormat
属性,只需将Microsoft.Office.Interop.Excel.Range
对象转换为dynamic
对象!