我正在尝试将一些简单的Userform中的一些vlaue或文本添加到现有的Excel-File中。打开Excel文件后,用户应该能够选择工作表,然后将textbox.text添加到所选工作表中。我使用组合框来选择或激活工作表。请参阅下面的代码:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBox1.Text)
{
case "Sheetname":
//((Excel.Worksheet)xlWorkBook.Sheets[1]).Select();
xlWorkBook.Sheets[1].Activate();
break;
case "Scheetname":
//((Excel.Worksheet)xlWorkBook.Sheets[2]).Select();
xlWorkBook.Sheets[2].Activate();
break;
}
然而,在选择正确的工作表后,我的程序会继续将值写入第一张工作表。
我用于添加到Excel工作表的代码如下:
private void button1_Click(object sender, EventArgs e) // Hier werden die daten eingetragen!
{
int lastRow = xlWorkSheet.Range["A" + xlWorkSheet.Rows.Count].End[Excel.XlDirection.xlUp].Row + 1;
xlWorkSheet.Cells[lastRow, 1] = textBox1.Text;
xlWorkSheet.Cells[lastRow, 2] = textBox2.Text;
xlWorkSheet.Cells[lastRow, 3] = textBox2.Text;
}
要打开Excel文件,请使用以下代码:
xlexcel = new Excel.Application();
xlexcel.Visible = true; //Tabelle ist Sichtbar
// Datei öffnen
xlWorkBook = xlexcel.Workbooks.Open("mypath");
xlWorkSheet =(Excel.Worksheet)xlWorkBook.Worksheets[comboBox1.SelectedText];
有人能帮助我吗?
谢谢
答案 0 :(得分:0)
将Activate()
方法替换为Select()
方法
How to: Programmatically Select Worksheets
Select方法选择指定的对象,该对象移动用户 选择新对象。如果需要,请使用Activate方法 在不改变用户选择的情况下将焦点带到对象上。
答案 1 :(得分:0)
首次打开工作簿时,您将在xlWorkSheet
中存储在组合框中选择的初始值。无论您之后做什么或哪个工作表处于活动状态,变量总是指他们选择的第一个。您需要在组合框中选择新值时更新变量:
void OpenExcel()
{
xlexcel = new Excel.Application();
xlexcel.Visible = true; //Tabelle ist Sichtbar
// Datei öffnen
xlWorkBook = xlexcel.Workbooks.Open("mypath");
// store first selected sheet in variable
xlWorkSheet =(Excel.Worksheet)xlWorkBook.Worksheets[comboBox1.SelectedText];
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// select new sheet and update variable to refer to it
switch (comboBox1.Text)
{
case "Sheetname":
xlWorkSheet = (Excel.Worksheet)(xlWorkBook.Sheets[1]);
xlWorkSheet.Select();
break;
case "Scheetname":
xlWorkSheet = (Excel.Worksheet)(xlWorkBook.Sheets[2]);
xlWorkSheet.Select();
break;
}
}
private void button1_Click(object sender, EventArgs e) // Hier werden die daten eingetragen!
{
int lastRow = xlWorkSheet.Range["A" + xlWorkSheet.Rows.Count].End[Excel.XlDirection.xlUp].Row + 1;
xlWorkSheet.Cells[lastRow, 1] = textBox1.Text;
xlWorkSheet.Cells[lastRow, 2] = textBox2.Text;
xlWorkSheet.Cells[lastRow, 3] = textBox2.Text;
}