【问题标题】:Export into excel file without headers c# using Oledb使用 Oledb 导出到没有标题 c# 的 excel 文件
【发布时间】:2012-04-19 07:51:30
【问题描述】:

我正在使用 OleDB,我想将我的对象导出到 Excel 表中。工作表中的每一行都是我的对象之一。问题是当工作表中没有列标题时,我不知道如何插入数据。

这个:

commandString = "Insert into [Sheet1$] values('test1', 'test2')"

抛出此异常:

Number of query values and destination fields are not the same.

我的连接字符串是:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename+";Extended Properties='Excel 8.0;HDR=No'"

【问题讨论】:

    标签: c# oledb oledbconnection oledbcommand


    【解决方案1】:

    如果连接字符串包含 HDR=NO,则 Jet OLE DB 提供程序会自动为您命名字段(F1 为第一个字段,F2 为第二个字段,依此类推)。 我会尝试以这种方式更改您的查询

    commandString = "Insert into [Sheet1$] (F1, F2) values('test1', 'test2')" 
    

    这仅在您创建了 excel 文件并在 Sheet1 第一行的前两个单元格中插入了一些内容后才有效

    【讨论】:

    • 这不起作用。现在它说 INSERT INTO 语句包含以下未知字段名称:'F1'。请确保您输入的名称正确,然后重试该操作。
    • 运行类似“select * from sheet1”的命令并查看返回的字段名称,然后使用这些名称构建您插入的内容
    • 好吧,我已经找到了 INVALID FIELD NAME 错误的原因。当 excel 文件为空时发生。如果您在第一个单元格和第二个单元格中插入内容,则可以识别 F1 和 F2 字段名称。
    • 这对我帮助很大!我使用名为Account # 的列标题遇到了这个错误。无论出于何种原因,列标题中的# 符号造成了此错误。
    【解决方案2】:

    您需要指定要写入的哪些 值,因为您不使用 HDR - 只需使用单元格。 错误“查询值的数量”仅意味着 - 没有为提供的值分配字段。

    更新:@Steve 的字段(F1、F2 等)是正确的,下面的代码在这里可以正常工作:

        OleDbConnection Cn = new OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=No\"", @"D:\test.xls"));
        Cn.Open();
        OleDbCommand Com = new OleDbCommand("INSERT INTO [Sheet1$](F1,F2) VALUES('test3','test4');", Cn);
        Com.ExecuteNonQuery();
        Cn.Close();
    

    【讨论】:

    • INSERT INTO 语句包含以下未知字段名称:'A1'。请确保您输入的名称正确,然后重试该操作。
    • 顺便说一句,我错了,@Steve 说得对——您需要关注基于数字的字段(F1、F2 等)。但更新后的源代码确实有效。
    • 很奇怪。我正在使用您提供的完全相同的代码,但我又遇到了这个异常。
    • 您使用的是 F1-Fx 字段结构??
    • 选择时返回哪些字段? (为了安全起见,这张纸叫 Sheet1 对吧?)
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多