ExcelスプレッドシートでAlterテーブルを使用して、既存のスプレッドシートに新しい列を追加しようとしましたが、ExcelでAlterテーブルを使用できないことがわかりました。
ネットを閲覧したところ、select intoを使用して、新しい列を含む複製ワークシートを作成できることがわかりました。これのコードは次のとおりです。
static private bool CopyAndCreateNewSheet()
{
try
{
DataTable dataTable = new DataTable();
using (OleDbConnection conn = new OleDbConnection(ConfigHelper.ConnectionStringReadWriteWorkBook))
{
conn.Open();
//string selectQuery = "SELECT 0 As IsProcessed, * INTO [Copy] FROM [" + ConfigHelper.WorkSheetName + "$]";
string selectQuery = "SELECT 0 As IsProcessed, * INTO [Excel 12.0;HDR= Yes;DATABASE=c:\\data\\Apr12.xlsx].[copyd] FROM [" + ConfigHelper.WorkSheetName + "$]";
OleDbCommand cmd = new OleDbCommand(selectQuery, conn);
int count = cmd.ExecuteNonQuery();
MessageBox.Show(count.ToString());
conn.Close();
}
}
catch (OleDbException e)
{
MessageBox.Show(e.Message.ToString());
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return true;
}
connectionstringの設定は次のとおりです。
<add name="ReadWriteWorkBook" connectionString='Provider = Microsoft.ACE.OLEDB.12.0; Data Source="c:\data\Apr12.xlsx"; Extended Properties="Excel 12.0;HDR=Yes;READONLY=FALSE"'/>
コメント付きのクエリとコメントなしのクエリの両方でselectを実行しようとしましたが、うまくいきませんでした...
上記のメソッド呼び出しの後でワークブックを開くと、次のエラーが発生します。「Excelでファイルに読み取り不能な接続が見つかりました。このブックの内容を復元しますか?このブックのソースを信頼できる場合は、[はい]をクリックしてください。」
[はい]をクリックすると、新しいタブが表示され、新しいヘッダーも表示されますが、Excelによってデータが削除されたため、データが表示されません。
どんな助けでも大歓迎です。
前もって感謝します。