附加到已创build的excel文件

我有这个Excel文件,目前从我的C#应用​​程序的内容写入其单元格内容:

private void button8_Click(object sender, EventArgs e) { Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) { MessageBox.Show("Excel is not properly installed!!"); return; } Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xlWorkSheet.Cells[1, 1] = comboBox2.Text; xlWorkSheet.Cells[1, 2] = textBox5.Text; xlWorkSheet.Cells[1, 3] = textBox2.Text; xlWorkSheet.Cells[1, 4] = comboBox3.Text; xlWorkSheet.Cells[1, 5] = textBox3.Text; xlWorkSheet.Cells[1, 6] = comboBox1.Text; xlWorkBook.SaveAs(@"cross_check.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); Marshal.ReleaseComObject(xlWorkSheet); Marshal.ReleaseComObject(xlWorkBook); Marshal.ReleaseComObject(xlApp); MessageBox.Show("Excel file created succcessfully"); } } 

如何附加到已经创build的同一个文件?为了进一步扩展,现在我必须指定要添加的值的单元格。 我怎么喜欢以某种方式增加,就像无论用户点击添加到文件button多less次,它应该增加以前的模式。 例如。 我有 :

  xlWorkSheet.Cells[1, 1] = comboBox2.Text; xlWorkSheet.Cells[1, 2] = textBox5.Text; xlWorkSheet.Cells[1, 3] = textBox2.Text; xlWorkSheet.Cells[1, 4] = comboBox3.Text; xlWorkSheet.Cells[1, 5] = textBox3.Text; xlWorkSheet.Cells[1, 6] = comboBox1.Text; 

点击button,我将如何使它现在遵循这种模式:

  xlWorkSheet.Cells[2, 1] = comboBox2.Text; xlWorkSheet.Cells[2, 2] = textBox5.Text; xlWorkSheet.Cells[2, 3] = textBox2.Text; xlWorkSheet.Cells[2, 4] = comboBox3.Text; xlWorkSheet.Cells[2, 5] = textBox3.Text; xlWorkSheet.Cells[2, 6] = comboBox1.Text; 

我想你通过Microsoft.Office.Interop.Excel参考使用Excel对象。 那么你必须修改你的代码如下

  private void button8_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application xlApp; //Declare the //Excel object try { xlApp = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); } catch (Exception ee) { xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) { MessageBox.Show("Excel is not properly installed!!"); return; } } if (xlApp == null) { MessageBox.Show("Excel is not properly installed!!"); return; } object misValue = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.Workbook xlWorkBook=xlApp.Workbooks.Add(misValue); try { xlWorkBook = xlApp.Workbooks.Open(@"cross_check.xls");//, } catch (Exception ex) { ;// } Microsoft.Office.Interop.Excel.Range range; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); int rownum = 1; int MAX_ROWS=30000; //You may define your own limit bool written = true; range = xlWorkSheet.UsedRange; while ((written) && (rownum<MAX_ROWS)) { var test = (range.Cells[rownum, 1] as Microsoft.Office.Interop.Excel.Range).Value2; if (test != null) { rownum++; } else { written = false; } } if (written == false) { xlWorkSheet.Cells[rownum, 1] = comboBox2.Text; xlWorkSheet.Cells[rownum, 2] = textBox5.Text; xlWorkSheet.Cells[rownum, 3] = textBox2.Text; xlWorkSheet.Cells[rownum, 4] = comboBox3.Text; xlWorkSheet.Cells[rownum, 5] = textBox3.Text; xlWorkSheet.Cells[rownum, 6] = comboBox1.Text; } xlApp.DisplayAlerts = false; //Disables the prompts xlWorkBook.SaveAs(@"cross_check.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue); xlApp.DisplayAlerts = true; // xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); Marshal.ReleaseComObject(xlWorkSheet); Marshal.ReleaseComObject(xlWorkBook); Marshal.ReleaseComObject(xlApp); MessageBox.Show("Excel file created/updated succcessfully"); } 

在代码的第一步,检查Excel对象是否已经在运行。 如果是这样,我们不创build一个新的Excel对象,但我们使用在系统中运行的一个。 然后该工作簿被正确创build或更新。 保存时,必须保存

  Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared 

以便能够重新打开并更新它。

要加快数据input一个修改后的代码,你可以使用引用。

您应该添加一个额外的button,例如button9,并在click事件中使用带引号的代码,并对input数据的button8进行必要的修改。 此外,你必须声明variablesxlApp,xlWorkBook,xlWorkSheet等是全球性和公共的在下面的代码,

  ............ public bool startd = false; public int rownum; public int MAX_ROWS = 30000;//You may define your own limit here public bool isFirstTime = true; public string oldBtnFileText; public string oldBtnDataText; public Microsoft.Office.Interop.Excel.Application xlApp; public Microsoft.Office.Interop.Excel.Workbook xlWorkBook; public Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; public Microsoft.Office.Interop.Excel.Range range; public object misValue; private void button8_Click(object sender, EventArgs e) { if (startd == false) { return; } if (isFirstTime == true) { bool written = true; int rnum = 1; if (xlWorkSheet!=null) { range=xlWorkSheet.UsedRange; while ((written) && (rnum < MAX_ROWS)) { var test = (range.Cells[rnum, 1] as Microsoft.Office.Interop.Excel.Range).Value2; if (test != null) { rnum++; } else { written = false; } } if (written == false) { rownum = rnum; isFirstTime = false; } else { MessageBox.Show("The current WorkSheet is Full"); return; } } } if (xlWorkSheet!=null) { xlWorkSheet.Cells[rownum, 1] = comboBox2.Text; xlWorkSheet.Cells[rownum, 2] = textBox5.Text; xlWorkSheet.Cells[rownum, 3] = textBox2.Text; xlWorkSheet.Cells[rownum, 4] = comboBox3.Text; xlWorkSheet.Cells[rownum, 5] = textBox3.Text; xlWorkSheet.Cells[rownum, 6] = comboBox1.Text; rownum++; } } private void button9_Click(object sender, EventArgs e) { if (startd == false) { try { xlApp = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); } catch (Exception ee) { xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) { MessageBox.Show("Excel is not properly installed!!"); return; } } if (xlApp == null) { MessageBox.Show("Excel is not properly installed!!"); return; } misValue = System.Reflection.Missing.Value; xlWorkBook = xlApp.Workbooks.Add(misValue); try { xlWorkBook = xlApp.Workbooks.Open(@"cross_check.xls");//, } catch (Exception ex) { ;// } xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); oldBtnFileText = button9.Text.ToString(); button9.Text = "File Ready to accept data"; oldBtnDataText = button1.Text.ToString(); button8.Text = "Enter Data"; startd = true; } else { xlApp.DisplayAlerts = false; xlWorkBook.SaveAs(@"cross_check.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue); xlApp.DisplayAlerts = true; xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); Marshal.ReleaseComObject(xlWorkSheet); Marshal.ReleaseComObject(xlWorkBook); Marshal.ReleaseComObject(xlApp); MessageBox.Show("Excel file created/updated succcessfully"); startd = false; button9.Text = oldBtnFileText; //Restore the initial captions button8.Text = oldBtnDataText;//... } } // 

希望这些可以是有用的。