【发布时间】:2018-11-12 03:30:02
【问题描述】:
在过去的几个小时里,我在尝试从 Excel 工作簿中提取工作表名称并在组合框中显示以供选择时遇到了问题。我设法让它工作,但我有点担心它的粗糙而且效率不高。
private void btnChoose2_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openfileDialog1 = new OpenFileDialog();
if (openfileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
openLabel.Text = openfileDialog1.SafeFileName;
String filename = DialogResult.ToString();
var excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Visible = false;
excelApp.Workbooks.Open(openfileDialog1.FileName);
int rcountTag = excelApp.Sheets.Count - 1;
for (int i = 1; i <= rcountTag + 1; i++)
{
Microsoft.Office.Interop.Excel.Sheets excelSheets = excelApp.Worksheets;
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)
excelSheets.get_Item(i);
comboBoxMapping.Items.Insert(i - 1, worksheet.Name);
}
}
}
任何建议将不胜感激。
【问题讨论】:
-
您需要做一些工作才能使这段代码更加健壮。在完成 Excel 之前,您必须致电
excelApp.Quit()。您还需要在 每个 COM 实例 上调用System.Runtime.InteropServices.Marshal.ReleaseComObject(instance),然后才能超出范围。在上面的代码中,还包括excelApp.Workbooks.Open(...)中的excelApp.Workbooks引用 - 您需要在调用 open 之前获取对excelApp.Workbooks的引用,然后在完成之前释放引用。您必须对每一个引用都非常小心。 -
谢谢 Enigmativity ,我会记住这一点的。