2

私は2つのタブを持つExcelシートを持っているので、1つのタブから行を取得して別のタブに挿入したいのですが、 sqlserver や mysql のように同じだと思いました。選択して挿入するだけ..

私はこのクエリを使用していますが、構文エラーが表示され、何が問題なのかわかりません。

  testCommand.CommandText = "Insert into [ActiveLicenses$]( Select * from [companies$] 
                             where [License Number] = '" + lnumber + "')";

  testCommand.ExecuteNonQuery();

アップデート

Excelシートから直接行を削除する方法はありますか?

4

2 に答える 2

0

SQLを使用して、Excelからデータを抽出できます。

     using (OleDbDataAdapter da = new OleDbDataAdapter(
     "SELECT " + columns + " FROM [" + worksheetName + "$]", conn))
     {
       DataTable dt = new DataTable(tableName);
       da.Fill(dt);
       ds.Tables.Add(dt);
     }

残念ながら、Excelへの挿入はこのようには機能しません。OleDb Insert Commandを使用して書き込むセルを指定することはできないと確信しています。セルは、指定された列の次の開いている行に自動的に移動します。updateステートメントで回避できます。

sql = "Update [Sheet1$A1:A10] SET A10 = 'YourValue'"; 
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();

個人的には、oleDBではなくVSTOを使用します。セルを抽出したら、コードを含むスプレッドシートを開いてデータを挿入するだけです。

Excel.Workbook wb = xlApp.Workbooks.Open(filePath);
rng = wb.Range["A1"];
rng.Value2 = "data";
于 2013-01-07T05:05:43.287 に答える
0

より高速な方法。

すべてのライセンスを DataTable に取り込み、不要なライセンスを削除するのに 1 分もかかりません。次に、DataTable を Csv にエクスポートするだけで、1 分もかからずにファイルの準備が整います。

以下のサンプル:

static List<string> licensecAll = new List<string>();
DataTable dt = new DataTable();
            OleDbDataAdapter dp = new OleDbDataAdapter("select * from [companies$]", testCnn);
            dp.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                for (int i = dt.Rows.Count-1; i >= 0; i--)
                {
                    string lnum = dt.Rows[i][0].ToString();
                    Console.WriteLine("LICENSE NUMBER" + lnum);
                    if (!licensecAll.Contains(lnum))
                    {
                        Console.WriteLine("ROW REMOVED");
                        dt.Rows.RemoveAt(i);
                    }
                }

            }

次に、datatableをcsvに実行するだけです....

  public static void DataTable2CSV(DataTable table, string filename, string seperateChar)
    {

        StreamWriter sr = null;

        try
        {

            sr = new StreamWriter(filename);
            string seperator = "";
            StringBuilder builder = new StringBuilder();
            foreach (DataColumn col in table.Columns)
            {

                builder.Append(seperator).Append(col.ColumnName);

                seperator = seperateChar;
            }

            sr.WriteLine(builder.ToString());

            foreach (DataRow row in table.Rows)
            {

                seperator = "";
                builder = new StringBuilder();
                foreach (DataColumn col in table.Columns)
                {

                    builder.Append(seperator).Append(row[col.ColumnName]);
                    seperator = seperateChar;

                }

                sr.WriteLine(builder.ToString());

            }

        }

        finally
        {

            if (sr != null)
            {

                sr.Close();

            }

        }

    } 
于 2013-01-07T05:41:30.767 に答える