附加到已创建的excel文件

时间:2016-11-10 14:51:42

标签: c# excel winforms

我有这个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");
    }

}

如何附加到已创建的同一文件?要进一步扩展,目前我必须指定必须添加值的单元格。我怎么喜欢以某种方式增加,以至于无论用户点击添加到文件按钮多少次,它都应该增加前一个模式。 例如。我有:

        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 个答案:

答案 0 :(得分:1)

我想你通过使用Excel对象 Microsoft.Office.Interop.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,如下面的代码所示,

    ............
    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;//...
        }

    }
//

希望这些有用。