1

こんにちは、複数のテキスト ボックスから Excel シートにデータを挿入するために Oledb を使用していません。私が抱えている問題は、数値型ではなく文字列として Excel に移行することではないため、その日付から grpah を自動化することはできません。数値型として値を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");
4

2 に答える 2

1

問題は、挿入コマンドを作成するときに整数を文字列リテラルに変換していることです。下記参照:

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 を手作業で作成すると、エラーが発生しやすくなります。整数はあなたの心配の最も少ないものです。たまたま単一引用符文字 (') を含む文字列を挿入しようとすることを想像してみてください。カルチャを小数点区切り記号としてコンマを使用したものに設定した場合のフロート、日付など。個人的には、EPPlus (XLSX) や ExcelLibrary (XLS) などのライブラリを使用することを好みます。どちらも LGPL ライセンスを取得しており、現在使用している方法よりも柔軟性が高くなります。マシンに Excel をインストールする必要がないため、サーバー側の Excel レポート生成に最適です。さらに、Microsoft Office Interop を使用したさまざまなメモリ リークの問題を回避するのに役立ちます。

于 2012-11-27T11:25:26.817 に答える
0

このコードスニペットは、C#でExcelスプレッドシートを処理するのに役立ちました。具体的には、数値の行を入力し、そのデータの合計を生成します。データをExcelに読み込んだ後にコード内の行を処理している場合は、ヘッダー行を無視していることを確認してください。これは明らかなはずですが、問題が発生している場合に備えて、ここで言及するだけです。

次のコードには、宣言が必要です-using 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();
于 2012-11-27T00:49:48.293 に答える