Excel.Style:添加样式类的方法失败

时间:2017-11-18 13:34:04

标签: c# excel excel-interop

这个工作正常,直到我在循环中添加它。我认为这是因为我要两次添加样式。

我正在尝试将样式添加到工作表的第一行。

if (LastRowInsertionIndex==1)
{
    xlWorkSheet.Activate();
    xlWorkSheet.Cells[1, 1] = "CaseNumber";
    xlWorkSheet.Cells[1, 2] = "Names";
    xlWorkSheet.Cells[1, 3] = "Bar Number";
    xlWorkSheet.Cells[1, 4] = "Email";
    xlWorkSheet.Cells[1, 5] = "Title";

    Excel.Style style = WorkBook.Styles.Add("NewStyle");

    //style.Font.Name = "Verdana";
    style.Font.Size = 14;
    style.Font.Bold = true;
    xlWorkSheet.Cells[1, 1].Style = style;
}

Excel.Style style = WorkBook.Styles.Add("NewStyle");导致错误;

Add method of Styles class failed

我必须逐一选择第一列中的每个单元格。有没有办法选择所有行。

1 个答案:

答案 0 :(得分:0)

由于Workbook.Styles似乎没有索引器,您可以实现这样的延迟加载方法:

private Dictionary<Excel.Workbook, Excel.Style> _MyStyle =
    new Dictionary<Excel.Workbook, Excel.Style>();
private Excel.Style MyStyle(Excel.Workbook Wb)
{
    Excel.Style myStyle;
    if (!_MyStyle.TryGetValue(Wb, out myStyle))
    {
        myStyle = Wb.Styles.Add("NewStyle");

        myStyle.Font.Name = "Verdana";
        myStyle.Font.Size = 14;
        myStyle.Font.Bold = true;
        _MyStyle.Add(Wb, myStyle);
    }

    return myStyle;
}

然后像这样实现:

if (LastRowInsertionIndex == 1)
{
    xlWorkSheet.Activate();
    xlWorkSheet.Cells[1, 1] = "CaseNumber";
    xlWorkSheet.Cells[1, 2] = "Names";
    xlWorkSheet.Cells[1, 3] = "Bar Number";
    xlWorkSheet.Cells[1, 4] = "Email";
    xlWorkSheet.Cells[1, 5] = "Title";

    xlWorkSheet.Cells[1, 1].Style = MyStyle(Workbook);
}

或者,您可以遍历工作簿中的每个样式,但是调用它的次数越多,样式越多,效率就越低。

延迟加载方法的另一个优点是,如果您实现多个样式,则可以将其作为附加参数传递。