将多个文本框数据插入Excel文件

我想编写一个程序,使用循环将文本保存到Excel文件中,因为我想将多个文本插入到Excel中。 我发现代码,但它只覆盖单元格中的数据。 我想让程序find最后一行并将新数据插入下一行。 我卡在这里,请有人帮助我如何做到这一点在C#中。

object misValue = System.Reflection.Missing.Value; xlApp = new Excel.ApplicationClass(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xlWorkSheet.Cells[1, 1] = "FirstName"; xlWorkSheet.Cells[1, 2] = "LastName"; xlWorkSheet.Cells[1, 3] = "JobTitle"; xlWorkSheet.Cells[1, 4] = "Address"; for (int i=2; i<=6; i++) { xlWorkSheet.Cells[i, 1] = textBox1.Text; xlWorkSheet.Cells[i, 2] = textBox2.Text; xlWorkSheet.Cells[i, 3] = textBox3.Text; xlWorkSheet.Cells[i, 4] = textBox4.Text; } 

就像我提到的那样,你不需要使用循环。 看到这个例子

假设你的表单看起来像这样。

在这里输入图像说明

代码:(试验和testing)

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; Namespace WindowsFormsApplication2 { public partial class Form1 : Form { Microsoft.Office.Interop.Excel.Application xlexcel; Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; Public Form1() { InitializeComponent(); } //~~> Open File private void button1_Click(object sender, EventArgs e) { xlexcel = new Excel.Application(); xlexcel.Visible = true; // Open a File xlWorkBook = xlexcel.Workbooks.Open("C:\\MyFile.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xlWorkSheet.Cells[1, 1] = "FirstName"; xlWorkSheet.Cells[1, 2] = "LastName"; xlWorkSheet.Cells[1, 3] = "JobTitle"; xlWorkSheet.Cells[1, 4] = "Address"; } //~~> Add Data private void button2_Click(object sender, EventArgs e) { 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] = textBox3.Text; xlWorkSheet.Cells[_lastRow, 4] = textBox4.Text; } //~~> Once done close and quit Excel private void button3_Click(object sender, EventArgs e) { xlWorkBook.Close(true, misValue, misValue); xlexcel.Quit(); releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlexcel); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } } } } 

跟随评论

Range对象是工作表对象的一部分。 所以你不应该在那里得到任何错误。 就像我上面提到的,代码是经过testing的。

在这里输入图像描述

更多后续(从评论)

上面的代码在VS 2010 Ultimate上进行了testing。 如果你有VS 2008,那么更换线路

 int _lastRow = xlWorkSheet.Cells[xlWorkSheet.Rows.Count, 1].End[Excel.XlDirection.xlUp].Row + 1; 

 int _lastRow = xlWorkSheet.Cells.Find( "*", xlWorkSheet.Cells[1,1], Excel.XlFindLookIn.xlFormulas, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, misValue, misValue, misValue ).Row + 1 ; 

你主要关心的是在你的excel中findlast used row

为此,你可以使用

  Excel.Range usedRange = xlWorkSheet .UsedRange; Excel.Range _lastCell= usedRange.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); int _lastRow= lastCell.Row; // Gives you the last used row in your Excel sheet int _lastCol = lastCell.Column; // Give you the last used column _lastRow++; // To get the next row for (int i=_lastRow; i<=_lastrow+6; i++) // Set your i value to _lastRow { xlWorkSheet.Cells[i, 1] = textBox1.Text; xlWorkSheet.Cells[i, 2] = textBox2.Text; xlWorkSheet.Cells[i, 3] = textBox3.Text; xlWorkSheet.Cells[i, 4] = textBox4.Text; }