0

我曾尝试在 excel 电子表格上使用 Alter table 向现有电子表格添加新列,但发现我无法在 excel 上使用 alter table。

通过浏览网络,我发现我可以使用 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;
        }

我的连接字符串配置如下。

<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"'/>

我已经尝试使用注释查询和未注释查询来运行选择,但没有运气......

当我在上述方法调用后打开我的工作簿时,出现以下错误。“Excel 在文件中发现无法读取的连接。是否要恢复此工作簿的内容?如果您信任此工作簿的来源,请单击是。”

当我单击“是”时,我的新选项卡在那里,并且新标题也在那里,但没有数据,因为 excel 已从中删除数据。

非常感谢任何帮助。

提前致谢。

4

1 回答 1

0

天,

我能够复制它并让它完美地工作。我使用的代码如下所示:

    public static void Main(string[] Arguments)
    {
        try
        {
            string sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"Test.xlsx\";Extended Properties=\"Excel 12.0;HDR=Yes;READONLY=FALSE\"";

            DataTable dataTable = new DataTable();
            using (OleDbConnection conn = new OleDbConnection(sConnectionString))
            {
                conn.Open();

                string selectQuery = "SELECT 0 As IsProcessed, * INTO [Excel 12.0;HDR= Yes;DATABASE=Test.xlsx].[copyd]  FROM [TestWorkSheet1$]";

                OleDbCommand cmd = new OleDbCommand(selectQuery, conn);
                int count = cmd.ExecuteNonQuery();

                Console.WriteLine(count.ToString());

                conn.Close();
            }

        }
        catch (OleDbException e)
        {
            Console.WriteLine(e.Message.ToString());

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

请注意,此代码稍作修改以在控制台应用程序中运行。然而,这并不能真正帮助你。有时使用 Excel 可能会很痛苦,您是否考虑过以下调查:

  • 权限
  • 原始文件在 Excel 中打开时是否没有问题(即,该文件首先是否可由 Excel 读取?)
  • Excel 是否以某种方式 TSR 并以某种方式干扰您的项目?我以前见过这种情况,通常是在 Excel 未正确关闭时

祝你好运。

干杯!

于 2012-08-21T06:03:21.367 回答