定义了过多字段-Excel

简介:

//p_Path Excel文件目录

publicDataTableGetDataFromExcel(stringp_Path)

 {

 stringstrCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + p_Path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=0'";

    OleDbConnectionconExcel = newOleDbConnection(strCon);

    DataSetds = newDataSet();

    DataTabledt = newDataTable();

    try

    {

      if (!File.Exists(p_Path))

      {

         dt.TableName = "false";

       }

       else

       {

         conExcel.Open();

         stringstrSql = "select * from  [Sheet1$A:CV] where [银行账号] is not null and [银行账号] <> ''";

       //  stringstrSql = "select * from  [Sheet1$] where [银行账号] is not null and [银行账号] <> ''";

         OleDbDataAdaptermyDataAdapter = newOleDbDataAdapter(strSqlconExcel);

         inti = myDataAdapter.SelectCommand.Parameters.Count;

         System.Data.OleDb.OleDbCommandBuilderbuilder = newOleDbCommandBuilder(myDataAdapter);

         builder.QuotePrefix = "[";     //获取insert语句中保留字符(起始位置)

         builder.QuoteSuffix = "]"//获取insert语句中保留字符(结束位置)

         myDataAdapter.Fill(ds"Sheet1$");//这个地方会报错“定义了过多的字段”

         dt = ds.Tables[0].Copy();

         conExcel.Close();

          ds.WriteXml("c:\\EXML.xml"); //Excel To XML

          }

        }

       catch (Exceptione)

        {

         if (conExcel.State == ConnectionState.Open)

         conExcel.Close();

         log4net.LogManager.GetLogger(this.GetType()).Error("GetDataFromExcel(" + p_Path + ")"e);

         dt.TableName = "false";

         }

        File.Delete(p_Path);//删除文件

         returndt;

}

 

stringstrSql = "select * from  [Sheet1$] where [银行账号] is not null and [银行账号] <> ''"; 

使用上面会出现定义了过多的字段这个错误。 郁闷的是你的Excel表字段就几十列(有效数据列),为什么会说“定义了过多的字段”呢?,为什么我要特别强调是有效的数据列呢????

 

问题原因:

 

Excel总列数是A-IV 255个单位长度),建立Excel时候,执行了插入操作,会是Excel长度超过255(虽然列数还是A-IV),导致无法读取。用上面的查询语句没有限制Sheet1$ 这张表的列数(程序在构造OleDbDataAdapter会加载所有的列数,包括空白列),这样就超过了Excel长度域

 

解决方法:

 

目前我这张Sheet1$表有效数据列最长只有100列(其他的是空白列),所以查询条件我就限定在A—CV列,这样就在myDataAdapter.Fill(ds"Sheet1$");就不会报定义了过多的字段出错。

 

 我猜想,插入行也同样会出现这样的问题,只要我们在查询条件下,限定行数和列数就可以避免此类问题。

 

官网的解释

 

症状:

 

当您添加新字段或更改现有字段的属性后,保存表时,您收到消息"定义了过多的字段,"跟邮件"中遇到错误保存。 数据类型未被更改" 即使您有 255 个或更少在表中定义的字段,您将会收到这些消息。

注意: 您还收到此信息如果添加或修改基于具有太多的字段的表的报表中的字段。
注意: 此错误消息生成 Microsoft Jet 数据库引擎 3.0 保留的错误号 3190

本文假定您熟悉 Visual Basic for Applications 和创建 Microsoft Access 应用程序使用随 Microsoft Access 提供的编程工具。 有关Visual Basic for Applications 的更多信息,请参阅"构建应用程序与 Microsoft Access"手册的版本。

注意: Visual Basic for Applications 被称为 Access Basic  Microsoft Access 版本 1 x  2.0 有关 Access Basic,请参考Microsoft Access 版本 1 x 中的"介绍到 Programming"手动或在 Microsoft Access 版本 2.0"构建应用程序"手册

 

原因:

 

若要释放内部的列数为已删除的字段或字段,修改其属性,执行以下项:

·          Microsoft Access 7.0  97,单击另存为 / 导出在的文件菜单并保存不同的名称表。 然后,删除原始表,并重命名为原始表名称的新表。

警告: 在文件菜单在版本 1 x  2.0 上单击另存为复制表,不记录结构。 在使用追加查询来填充新的表之前,不要删除原始表。

·          Microsoft Access 1 x  2.0,单击保存文件菜单上,并保存不同的名称表。 填充新表,原始表中的数据。 然后,删除原始表,并重命名为原始表名称的新表。

您还可以通过压缩数据库来释放内部的列数。



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2012/05/02/2479202.html,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
存储 定位技术 数据格式
Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容
Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容
|
10月前
|
存储 C语言
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
189 0
|
8月前
|
网络协议 Windows
使用 Excel cdata addmin 连接 SAP ABAP 系统时需要填写的参数定义解释
使用 Excel cdata addmin 连接 SAP ABAP 系统时需要填写的参数定义解释
54 0
|
11月前
|
Python
|
存储 前端开发
一个页面单个按钮导出两张Excel表格(表的结构、格式、字段都不一样)
一般来讲,前端页面向浏览器发二进制数据,使浏览器向用户询问是否存储文件有几种常见的方式
143 0
|
JavaScript
VUE element-ui 之table表格导出Excel(自定义表头+自定义导出字段内容)
VUE element-ui 之table表格导出Excel(自定义表头+自定义导出字段内容)
1171 0
|
数据格式 索引
Excel数据透视表的应用——解决多字段筛选计算占比事务
Excel数据透视表的应用——解决多字段筛选计算占比事务
394 0
Excel数据透视表的应用——解决多字段筛选计算占比事务
|
JSON 数据格式
excel 读取json中指定字段值
• FIND语法 • FIND(find_text, within_text, [start_num]) • FIND实例一 • FIND实例二 • MID语法 • MID(text, start_num, num_chars) • MID实例 • 获取excel中json指定字段值 • excel函数 • excel函数解释
excel 读取json中指定字段值