0

我正在开发一个 Excel 加载项来对 Excel 工作表执行多项检查。检查用于布局、文本和公式。我创建了一个功能区,当您按下按钮时它会调用 WinForm。在表格上,您可以设置不同的选项,然后单击“检查”进行全面检查。

工作表总是有相同的标题,所以我有一个类来检查标题中的布局。在这个类中,我有检查对齐、字体、高度等的方法。这是检查单元格对齐的方法的代码。它需要 3 个参数,范围、预期的水平对齐和垂直对齐。

private void CheckRangeAlignment(Excel.Range range, Excel.XlHAlign expHA,
    Excel.XlVAlign expVA) {
        Excel.XlHAlign actHA = Excel.XlHAlign.xlHAlignLeft;
        Excel.XlVAlign actVA = Excel.XlVAlign.xlVAlignTop;
        if (!Convert.IsDBNull(range.HorizontalAlignment))
            actHA = (Excel.XlHAlign)range.HorizontalAlignment;
        if (!Convert.IsDBNull(range.VerticalAlignment))
            actVA = (Excel.XlVAlign)range.VerticalAlignment;

        if (expHA != Excel.XlHAlign.xlHAlignLeft) {
            if (actHA != expHA || actVA != expVA) {
                this.FeedbackItems.AddDataItem(range.Row, range.Column, "Uitlijning");
                this._errors++;
            }
        } else {
            if (actHA != expHA && actHA != Excel.XlHAlign.xlHAlignGeneral || actVA != expVA) {
                this.FeedbackItems.AddDataItem(range.Row, range.Column, "Uitlijning");
                this._errors++;
            }
        }

        MRCO(actHA);
        MRCO(actVA);
    }

一些床单上发生了一件奇怪的事情。该范围的属性“Horizo​​ntalAlignment”为空。在 VS2012 中调试时,它会给出'{}'。所以代码给出了一个错误,说它无法将 Microsoft.Office.Interop.Excel.XlHAlign 转换为 System.DBNull。这就是我现在检查 DBNull 值的原因。现在这是真正奇怪的事情:我有一个文件没有问题,而另一个文件有问题。它也发生在 Font.Size、VerticalAlignment、Font.Bold 和 Font.Underline 等其他属性上。

有人可以帮我解决这个问题吗?我对 C# 中的 Excel 很陌生,所以也许我忽略了一些东西?提前致谢

4

2 回答 2

1

毕竟这是一个小问题。当它是一个范围时,这些属性将为空,因此导致 DBNull。我通过制作一个额外的变量来修复它,该变量选择范围中的第一个单元格。这样,属性永远不会是 DBNull。

Excel.Range xlcell = range.Cells[1,1];
于 2013-09-04T10:41:12.507 回答
1

还要记住的是,单个单元格有时可能包含多种属性.. 字体就是一个很好的例子。

采取 . 更进一步的字体属性示例 .. Cell字体。每当单元格包含混合字体属性(斜体、粗体、大小、删除线等)时,对象及其任何属性都会返回 System.DBNull。

您可以使用 Convert.IsDBNull(Cell.Font) 测试此条件,如果为真,则测试单个单元格。Characters确定每个字符的 Font 属性。

请参阅此处的文档:

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb223824%28v%3doffice.12%29

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb213514%28v%3doffice.12%29

于 2020-06-18T09:08:09.030 回答