从Excel工作表添加一列到WinForms

我在智慧的结尾,试图解决这个问题!

我有两个(看似相关的)问题:

问题1 – 我有一张工作表的Excel工作表。 在Form1中有一个浏览button,浏览Excel工作表。 所有这一切运作良好。 当我点击确定button,它打开了Form2,这也是正确的。 在Form2_Load事件中,我编写了代码来处理我需要使用Excel工作表(这是问题#2)执行的逻辑。 发生什么事情是,当我在浏览窗口上单击确定,它也打开了Excel表,我不想要的。 这是整个事情的代码:

Excel.Application xlAppl = new Excel.Application(); xlAppl.Visible = true; Excel.Workbook myWorkbook = xlAppl.Workbooks.Open(Form1.globalClass.GlobalVar); //Gets the path to the excel sheet Excel.Worksheet myWorkSheet = (Excel.Worksheet)myWorkbook.Worksheets[1]; Excel.Range range = (Excel.Range)myWorkSheet.Columns[1]; if(myWorkSheet != null) //This is the logic for problem#2 so please discard this for now. 

我基本上不想打开Excel工作表。 你能看到这个问题是什么?

问题2 – 在浏览Excel工作表后,我希望能够在Form2中的列表框中导入Excel工作表中的第一列。 以下是我所尝试的:

 if(myWorkSheet != null) { int rowCount = myWorkSheet.UsedRange.Rows.Count; //Will count the number of rows of cells with data in the first column listBox_CaseNumbers.BeginUpdate(); for (int i = 1; i <= rowCount; i++) { try { //I am not able to get the logic here! } catch (Exception ex) { MessageBox.Show(ex.Message + "\n" + ex.StackTrace); } } } 

如果您需要更多信息,请告诉我。

第一个问题很简单。 如果你不想看到Excel表格,那么不要设置xlApp.Visible = true。

但事实上,有一个更简单的方法来做你想要什么,而不加载Excel。 我从你的问题中了解到,你所要做的就是从电子表格中提取数据? 在这种情况下使用OleDbDataAdapter来代替,如下所示:

 string xlConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=YourXLFilePathAndName;Extended Properties='Excel 8.0;HDR=No;IMEX=1';"; var xlConn = new OleDbConnection(xlConnStr); var da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", xlConn); var xlDT = new DataTable(); da.Fill(xlDT); 

现在您将拥有一个包含行和列的DataTable。 假设电子表格只有一列中的数据,那么DataTable也只有一列。 获取值只需遍历行。

有一件事要注意:如果你的数据有一个列标题,那么你需要在连接string中设置HDR = Yes。

问题1 Excel工作表将始终打开。 你可以显示它xlAppl.Visible = true; 或不xlAppl.Visible = false; 最后,您需要closures工作簿Excel:xlAppl.Quit();

问题2 listBox_CaseNumbers.Items.Add(myWorkSheet.Cells [i,indexColumn] .Value);