【问题标题】:Create a sheet into a workbook without headers ace.oledb在没有标题 ace.oledb 的工作簿中创建工作表
【发布时间】:2013-02-15 15:57:23
【问题描述】:

如何通过 ace.oledb 创建一个没有标题的命名工作表 - 就像默认工作表一样?

工作表的创建命令必须类似于:

CREATE TABLE [MySheet] (field1 type, field2 type ..., fieldn type )

它创建 MySheet 并始终插入(无论连接字符串中的 HDR 扩展属性或注册表设置 FirstRowHasNames)在 MySheet 中包含 field1、field2...fieldn 的第一行

基本上我不想要一个“表头”,我只需要在一个新创建的命名空表中插入值。

【问题讨论】:

  • HDR 是您应该更改的所有内容,以防止这种情况发生 - 我之前已经做过无数次了。你能发布你的连接字符串吗??
  • oleDbConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;数据源=d:\NewExcelFile.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=NO"";" ;也试过 HDR=YES - 我已经在我的帖子中说过 - 在注册表中设置和不设置 FirstRowHasNames 为 0...
  • 创建工作表后您打算如何处理它?如果您只需要一张空白纸,为什么不使用 Interop?毕竟,与空白工作表进行交互的唯一方法是使用 Interop。
  • 我想知道你为什么要回答一个问题......我很清楚我需要什么。不,“您能够与空工作表交互的唯一方法是使用 Interop”是不正确的。

标签: c# excel oledb ado


【解决方案1】:

这并不漂亮,但这是我发现创建一个没有任何内容的新工作表的唯一方法。我发现的唯一问题是 Oledb 会自动在 CREATE 命令中指定的标题单元格上创建一个命名范围,但假设您不关心它,那么这应该可以正常工作。

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName +
    ";Mode=ReadWrite;Extended Properties=\"Excel 12.0 XML;HDR=NO\"";

using (OleDbConnection conn = new OleDbConnection(connectionString))
{
    conn.Open();

    using (OleDbCommand cmd = new OleDbCommand())
    {
        cmd.Connection = conn;
        cmd.CommandText = "CREATE TABLE [MySheet] (<colname> <col type>)";  // Doesn't matter what the field is called
        cmd.ExecuteNonQuery();

        cmd.CommandText = "UPDATE [MySheet$] SET F1 = \"\"";
        cmd.ExecuteNonQuery();
    }

    conn.Close();
}

【讨论】:

  • 对我来说,它并不脏。事实证明,命名范围使我达到了 INSERTs 的 255 个字符限制。如果我 INSERT INTO 范围,那么我会避开 255 个字符的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2019-02-11
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多