2016-11-10 40 views
0

我有这个Excel,目前从我的C#应用​​程序到其细胞内容写入内容的文件的文件:追加到Excel中已创建

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"); 
    } 

} 

如何追加到同一个文件已经被创造出来的?为了进一步扩展,目前我必须指定这些值必须添加到的单元格。我怎么喜欢以某种方式增加,就像无论用户点击添加到文件按钮的次数,它应该增加以前的模式。 例如。我有:

 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; 

在点击按钮时,我会怎么做,现在遵循此模式:

 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; 

回答

1

我想你通过 的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对象进行检查的第一步,如果它已经 运行,执行。如果是这样,我们不创建一个新的Excel对象,但我们使用系统中正在运行的一个。然后该工作簿已正确创建或更新。保存时,必须保存为

 Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared 

为了能够重新打开并更新它。

要加速数据输入修改后的代码,您可能会使用引号。

您应该添加一个附加按钮,例如button9并在click事件中使用带引号的代码,并对输入数据的button8进行必要的修改。 此外,你必须给变量xlApp,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;//... 
     } 

    } 
// 

希望这些可能是有用的。

+0

谢谢,我会尝试这个,并给你我的更新 – Jevon

+0

我这样做,但它会提示我,并询问是否要覆盖当前文件。 – Jevon

+0

您可以检查更新的代码。它应该可以正常工作。 – SteveTheGrk