我使用Microsoft.Office.Interop.Excel我返回一个object[,]包含double元素的2D数组类型.请注意,索引下限1不是默认值0,但我可以轻松处理.
如何很好地将数组转换为double[,]使用.NET 3.5.(很好地,我的意思是简洁,或紧凑).
注意
double[] values_2 = values.Cast<double>().ToArray();
Run Code Online (Sandbox Code Playgroud)
确实有效,但它通过阵列变平为一维结构.
我已经在这里做了一些搜索,关于这个,这个,这个以及更多,但没有任何线索,所以我将不得不问你们.
我正在尝试通过Interop打开一个Excel文件,我安装了Office 2007,所以我正在使用Microsoft.Office.Interop.Excel版本14.0.
当我尝试打开一个有效的xls文件时,一切运行正常.
但是,如果我尝试通过Interop打开无效文件(如位图或可执行文件),Excel会在没有抱怨或警告的情况下打开它.
如何检测Excel是否加载了无效的工作簿文件,而没有阻止警报?
我正在尝试编写Excel对象阅读器的单元测试.其中一种情况是尝试打开无效文件.
一些代码可以帮助:应用程序创建:
_app = new Application()
{
Visible = false,
DisplayAlerts = false, // <-- I don't want to remove this.
AskToUpdateLinks = false,
};
Run Code Online (Sandbox Code Playgroud)
工作簿开放:
_workbooks.Open(filename);
_workbook = _workbooks.get_Item(1); // 1-based.
_worksheets = _workbook.Sheets;
Run Code Online (Sandbox Code Playgroud)
编辑:只是添加1个更多信息:Excel加载无效文件.如果DisplayAlerts设置为true,则会抱怨(打开一个对话框)通知工作簿似乎已损坏,但如果DisplayAlerts设置为false,则会加载文件,如下所示:

我想使用以下代码在c#中读取Excel文件
string excelFileName = "Book2.xls";
string excelConnectString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Book2.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
//string excelConnectString = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " + excelFileName + ";" + "Extended Properties = Excel 8.0; HDR=Yes;IMEX=1";
OleDbConnection objConn = new OleDbConnection(excelConnectString);
OleDbCommand objCmd = new OleDbCommand("Select * From [Sheet1$]", objConn);
OleDbDataAdapter objDatAdap = new OleDbDataAdapter();
objDatAdap.SelectCommand = objCmd;
DataSet ds = new DataSet();
objDatAdap.Fill(ds);
Run Code Online (Sandbox Code Playgroud)

一切都工作正常.现在我的要求是阅读下面的excel文件
SELECT A,B,D From [Sheet1];
Run Code Online (Sandbox Code Playgroud)