从c#文本框插入数据到excel

嗨即时通讯Oledb从多个文本框插入数据到Excel表单。 我遇到的问题是,它不是作为一个数字types,但string进入Excel,所以一个grpah不能在date自动。 我将如何插入值作为数字types的Excel中? 我尝试将文本框转换为int,但没有运气。

我的代码如下。

string szConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=L://Metrics_gen.xlsx;Extended Properties='Excel 8.0;HDR=YES;'"; OleDbConnection conn = new OleDbConnection(szConn); int v1 = Convert.ToInt32(textBox1.Text); int v2 = Convert.ToInt32(textBox2.Text); int v3 = Convert.ToInt32(textBox3.Text); int v4 = Convert.ToInt32(textBox4.Text); int v5 = Convert.ToInt32(textBox5.Text); conn.Open(); OleDbCommand cmd = new OleDbCommand("INSERT INTO [Sheet1$]([Total],[Closed],[Issues],[Cancelled],[Back out]) VALUES('" + v1 + "','" + v2 + "','" + v3 + "','" + v4 + "','" + v5 + "')", conn); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("complete"); 

问题在于,在构buildinsert命令时,将整数转换为string文字。 见下文:

 OleDbCommand cmd = new OleDbCommand("INSERT INTO [Sheet1$]([Total],[Closed],[Issues],[Cancelled],[Back out]) VALUES('" + v1 + "','" + v2 + "','" + v3 + "','" + v4 + "','" + v5 + "')", conn); 

将该行更改为:

 OleDbCommand cmd = new OleDbCommand("INSERT INTO [Sheet1$]([Total],[Closed],[Issues],[Cancelled],[Back out]) VALUES(" + v1 + "," + v2 + "," + v3 + "," + v4 + "," + v5 + ")", conn); 

这应该解决你所有的问题:-)

注意:手工构造SQL容易出错。 整数是你最担心的。 想象一下,试图插入一个恰好包含单引号字符(')的string,当您将文化设置为逗号作为小数点分隔符,date等等时,将会使用浮点数。 就个人而言,我更喜欢使用诸如EPPlus(XLSX)和ExcelLibrary(XLS)之类的库。 两者都是LGPL许可的,给你比目前使用的方法更大的灵活性。 他们不需要在计算机上安装Excel,使其成为服务器端Excel报表生成的理想select。 此外,他们帮助避免各种内存泄漏问题的解决scheme,通常使用Microsoft Office Interop。

该代码片段帮助我处理C#中的Excel电子表格,特别是input数字行,然后生成这些数据的总和。 如果在将数据加载到excel之后,您正在处理代码中的行,请确保您忽略了标题行,这应该是显而易见的,但只是在这里提到它,以防遇到问题。

以下代码需要声明 – 使用Excel = Microsoft.Office.Interop.Excel;

  Excel.Application oXL; Excel.Workbook oWB; Excel.Worksheet oSheet; Excel.Range oRange; var filepath = "/somefilepath"; // Start Excel and get Application object. oXL = new Excel.Application(); // Set some properties oXL.Visible = true; oXL.DisplayAlerts = false; // Get a new workbook. oWB = oXL.Workbooks.Add(Missing.Value); // Get the Active sheet oSheet = (Excel.Worksheet)oWB.ActiveSheet; oSheet.Name = "Data"; int rowCount = 1; string strExpr; string strSort; foreach (DataRow dr in dt.Rows) { rowCount += 1; for (int i = 1; i < dt.Columns.Count + 1; i++) { // Add the header the first time through if (rowCount == 2) { oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName; } oSheet.Cells[rowCount, i] = dr[i - 1].ToString(); } } //Freze the first row oSheet.Application.ActiveWindow.SplitRow = 1; oSheet.Application.ActiveWindow.FreezePanes = true; // Resize the columns oRange = oSheet.get_Range(oSheet.Cells[1, 1], oSheet.Cells[rowCount, dt.Columns.Count]); oRange.EntireColumn.AutoFit(); // Save the sheet and close oSheet = null; oRange = null; oWB.SaveAs(filepath, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); oWB.Close(Missing.Value, Missing.Value, Missing.Value); oWB = null; oXL.Quit();