将 Excel sheet 中的列添加到 WinForms

Adding a column from Excel sheet to WinForms

我无计可施,正在努力解决这个问题!

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

第 1 期 - 我有一个 Excel sheet 和一个作品 sheet。我在 Form1 中有一个浏览按钮,用于浏览 Excel sheet。这一切都很好。当我单击“确定”按钮时,它会打开 Form2,这也是正确的。在 Form2_Load 事件中,我编写了代码来处理我需要使用 Excel sheet 执行的逻辑(这是问题 #2)。结果是,当我在浏览 window 上单击确定时,它还会打开我不想要的 Excel sheet。这是整个事情的代码:

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 sheet打开。你能看出是什么问题吗?

问题 2 - 在浏览 Excel sheet 后,我希望能够导入 Excel 中的第一列] sheet,在列表框中,在 Form2 中。这是我尝试过的:

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 Sheet 那么不要设置 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 也只有一列。要获取值,只需遍历行即可。

需要注意一点:如果你的数据有一列header,那么你需要在连接字符串中设置HDR=Yes。

第 1 期 Excel sheet 将永远打开。你可以显示它 xlAppl.Visible = true;或者不是 xlAppl.Visible = false; 最后需要关闭工作簿Excel:xlAppl.Quit();

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