[英]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.