我在我的智慧结束,试图解决这个问题!
我有两个(看似相关的)问题:
问题1 - 我有一张包含一张工作表的Excel表格。我在Form1中有一个浏览按钮,用于浏览Excel工作表。这一切都运作良好。当我单击“确定”按钮时,它会打开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中的listBox中导入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);
}
}
}
如果您需要我提供更多信息,请与我们联系。
答案 0 :(得分:1)
第一个问题很简单。如果您不想看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也只有一列。要获取值,只需遍历行。
有一点需要注意:如果您的数据有列标题,那么您需要在连接字符串中设置HDR = Yes。
答案 1 :(得分:0)
第1期 Excel工作表将始终打开。你可以显示它xlAppl.Visible = true;或不是xlAppl.Visible = false; 最后,您需要关闭工作簿Excel:xlAppl.Quit();
第2期 listBox_CaseNumbers.Items.Add(myWorkSheet.Cells [i,indexColumn] .Value);