繁体   English   中英

如何使用C#VSTO写入包含Excel错误的2D数据

[英]How to write 2D data containing excel errors using c# VSTO

我有Excel功能,可以在其中使用VSTO编写2D数据。 在某些情况下,我需要编写#N / A之类的Excel错误。 我该怎么做呢? 我试图使用XlCVError.xlErrNA,但它只写值2042。

在代码方面,我有以下内容:

public void WriteChanges(int startRow, int startCol, int endRow, int endCol, int rows, int columns, IItems items)
{
    object[,] data = new object[rows, columns];
    var startCell = (Range)this.sheet.Cells[startRow, startCol];
    var endCell = (Range)this.sheet.Cells[endRow, endCol];
    var rangeToWrite = this.sheet.Range[startCell, endCell];
    var error = new ExcelError();

    foreach (var item in items)
    {
        int row = item.Row;
        int col = item.Column;

        if (!(item.Value is eExcelErrror))
        {
            data[row, col] = item.Value;
        }
        else
        {
            data[row, col] = this.error.ToVstoError((eExcelError)item.Value);
        }
    }

    rangeToWrite.Value = data;
}

public enum eExcelError
{
    ExcelErrorValue = 2015,
    ExcelErrorNA = 2042
}

public class ExcelError
{
    public object ToVstoNativeError(eExcelError value)
    {
        switch (value)
        {
            case eExcelError.ExcelErrorNA:
                return this.VstoNoData();
            case eExcelError.ExcelErrorValue:
            default:
                return this.VstoErrorValue();
        }
    }

    public object VstoNoData()
    {
        return XlCVError.xlErrNA;
    }

    public object VstoErrorValue()
    {
        return XlCVError.xlErrValue;
    }
}

我认为不可能将Excel错误设置到单元格中……这是有道理的。 如果您是用户,并且在单元#DIV/0看到一个#DIV/0错误,但是没有公式,或者您看到了一个#NAME错误,并且您将定义的名称插入名称管理器,但仍然无法正常工作,会非常混乱。

我建议做的是cell.Value = "#REF" 至少通过这种方式,用户可以看到这只是一个字符串,而不是Excel的实际错误,因为它们可能陷入追逐兔子的洞中。

参考: https : //docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel.range.errors?view=excel-pia#Microsoft_Office_Interop_Excel_Range_Errors (注意:仅get

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM