我在最近几个小时试图从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);
}
}
}
非常感谢任何建议。
答案 0 :(得分:1)
你应该考虑使用第三方库,这将比使用互操作更容易。
这将让您获取所有工作表名称并将数据读入DataTable,然后您可以访问该数据表,但是您希望从中获取所需的任何数据。 GitHub自述页面有简单的示例,可以为您解决问题。
答案 1 :(得分:0)
如果要处理xlsx Excel格式,我建议EPPLUS。
然后using OfficeOpenXml;
获取工作表名称列表:
ExcelPackage DocInv = new ExcelPackage(new FileInfo(ExcelDocument));
DocList = DocInv.Workbook.Worksheets.AsEnumerable().Select(x => x.Name).ToList();