【发布时间】:2021-08-31 06:16:48
【问题描述】:
我用 C# winform 获取数据。
private void ReleaseExcelObject(object obj)
{
try
{
if (obj != null)
{
Marshal.ReleaseComObject(obj);
obj = null;
}
}
catch (Exception ex)
{
obj = null;
throw ex;
}
}
private void buttonOpen_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel.Application application = null;
Workbook workBook = null;
int tempNum = 0;
try
{
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() != DialogResult.OK)
return;
application = new Microsoft.Office.Interop.Excel.Application();
application.Visible = true;
workBook = application.Workbooks.Open(dlg.FileName);
Worksheet newWorkSheet = workBook.Worksheets.Add(After: workBook.Worksheets.Item[workBook.Worksheets.Count]);
int newSheetRow = 0;
Dictionary<int, string> upData = new Dictionary<int, string>();
for (int sheetIndex = 1; sheetIndex<workBook.Worksheets.Count; sheetIndex++)
{
for (int row = 1; row < workBook.Worksheets[sheetIndex].UsedRange.Rows.Count; row++)
{
upData.Add(row, null);
for (int col = 1; col < workBook.Worksheets[sheetIndex].UsedRange.Columns.Count; col++)
{
tempNum++;
if (workBook.Worksheets[sheetIndex].Cells[col, row] != null)
{
string cellData = workBook.Worksheets[sheetIndex].Cells[col, row].value;
string[] datas = cellData.Split(' ');
string dataName = null;
for (int k = 1; k < datas.Length; k++)
{
dataName += datas[k];
}
string icd11 = datas[0];
newWorkSheet.Cells[newSheetRow,0] = icd11;
newWorkSheet.Cells[newSheetRow,1] = dataName;
newWorkSheet.Cells[newSheetRow,2] = upData[col - 1];
upData[col] = dataName;
continue;
}
}
}
}
}
catch (Exception exc)
{
MessageBox.Show(tempNum + exc.Message);
}
finally
{
ReleaseExcelObject(workBook);
ReleaseExcelObject(application);
}
}
发生错误的部分是
MessageBox.Show(workBook.Sheets[0].ToString());
这部分。
并强制workBookSheet.getitem("hardCording").
这样做会导致单元格直接数据访问部分出错。
我想知道如何查询和插入excel数据。
错误是Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))
Excel 数据:
编辑工作表[0] 工作表[0] 无法
我不懂VBA
如何实现
excel树示例
【问题讨论】:
-
文档给出了一个例子,你看过了吗?您可以从该示例中得出或必须得出 (?) 结论,即第一张纸的索引为 1。请参阅:docs.microsoft.com/en-us/office/vba/api/excel.workbook.sheets
-
@Luuk 我更改开始工作表索引 =1 工作表对象是只读的??也许我理解正确
-
Try/Catch 让你很难找到代码出错的地方。你可以禁用它,看看你的错误就在这里:i.stack.imgur.com/ZwHlx.png
-
但是我确实在您的问题中看到了一些其他错误,而且您要达到的目标还不清楚。但是看到你的回答你解决了你自己的问题......
-
@LuukThankyou COM EXCEPTION 太可怕了哈哈
标签: c# excel winforms office-interop excel-interop