2016-11-10 2 views
0

я это первенствовать файл, который в данный момент записывает содержимое из моего C# приложение для его содержимого ячейки:Append, чтобы преуспеть файл, который уже создан

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

Я полагаю, вы используете объект 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 и используйте цитируемый код в событии клика с необходимыми изменениями, внесенными для кнопки 8, где вы вводите данные. Кроме того, вы должны объявить переменные 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;//... 
     } 

    } 
// 

Надежда это может быть полезно.

+0

Спасибо, я попробую это и дам вам мои обновления. – Jevon

+0

Я делаю это, но он подсказывает мне и спрашивает, хочу ли я перезаписать текущий файл. – Jevon

+0

Вы можете проверить обновленный код. Он должен работать нормально. – SteveTheGrk

Смежные вопросы