0

我正在尝试使用 ALTER 语句在带有 OLEDB 的 Excel 工作表中添加一列。我做不到。我尝试使用以下代码,但没有成功

sqladd = "ALTER TABLE Data ADD NewRow varchar(50)";

这里,Data 是 Excel 中的工作表名称,NewRow 是要添加的列名称。

4

1 回答 1

3

遗憾的是 OleDb 不支持 Alter Table 语句,但您可以通过在现有工作表上使用 Create Table 语句添加列,并在末尾定义新列。这实际上只会添加新列而保持现有数据不变。

您必须在 ReadWrite 模式下打开工作簿,并且不能在扩展属性中包含 IMEX=1。所以首先定义并打开你的连接......

string sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                           "Data Source=e:\\Test.xlsx;Mode=ReadWrite;" +
                           "Extended Properties=\"Excel 12.0;HDR=Yes\"";

OleDbConnection oConnection = new OleDbConnection();
oConnection.ConnectionString = sConnectionString;
oConnection.Open();

这个电子表格在 Sheet1 上已经有 Col1、Col2 和 Col3,所以...

string sSql = "Create Table [Sheet1$] (Col1 Int, Col2 Int, Col3 Int, NewColumn Int)";

using (OleDbCommand oCmd = new OleDbCommand(sSql, oConnection))
{
    oCmd.ExecuteNonQuery();
}

您还可以将数据复制到新工作表中并删除原始工作表,但删除只会清除内容,因为您实际上无法使用 OleDB 删除工作表...

Select [Sheet1$].*, Null As NewColumn Into [Sheet2] From [Sheet1$]

Drop Table [Sheet1$]
于 2015-08-06T13:28:46.360 回答