zoukankan      html  css  js  c++  java
  • 我的excel是2003版本的,里边有sheet1、sheet2两个工作表,当使用GetOleDbSchemaTable获取表Schema时,结果是4个,分别为: sheet1 sheet1$ sheet2 sheet2$

    原帖地址:http://bbs.csdn.net/topics/310230098

    -----------------------------------------------------------------------------------------------------

    我的excel是2003版本的,里边有sheet1、sheet2两个工作表,当使用GetOleDbSchemaTable获取表Schema时,结果是4个,分别为:

    sheet1 sheet1$ sheet2 sheet2$
    代码如下
    string cnnString = string.Format("Provider=Microsoft.Jet.OleDb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=yes; IMEX=2;'", sourceFile);
    OleDbConnection cnn=new OleDbConnection(destCnnString);
    cnn.Open ();
    DataTable dtSchema = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
    为什么呢?

    -----------------------------------------------------------------------------------------------------

    应该是你删除掉的那几个,我不明白为什么删除后通过你这样的方式还能看到
    即如果你建立了4个sheets删除两个,但是会发现还是能找到四个

    -----------------------------------------------------------------------------------------------------

    奇怪了!如果删除sheet1$,那么sheet1也就不见了!如果我新建一个sheet,那么就不会多一个sheet出来!查看隐藏的sheet也没有发现,为什么会多sheet出来呢?这个excel是别人给的,如果我自己建立excel文件则是正常的,为什么呢?

    -----------------------------------------------------------------------------------------------------

    又发现一个问题,如果是用dts导出来的,那就会有两个表名,如customers$和customers,不知道为什么?

    -----------------------------------------------------------------------------------------------------

    确定问题所在了!
    1:GetOleDbSchemaTable取到的表的信息还包括excel的命名区域;
    2:因为excel是通过dts导出生成的,导出时同时生成了命名区域;(还没找到哪里可以设置不生成命名区域)
    3:在excel2007中,公式--命名管理器中,删除命名区域即可!

  • 相关阅读:
    mysql 时间戳
    css优先级
    app横竖屏切换
    文本溢出时显示省略号
    react页面间传递参数
    去掉input获取focus时的边框
    Mac中好用的快捷键
    python 图片处理
    CSS padding margin border属性详解
    python3.x执行post请求时报错“POST data should be bytes or an iterable of bytes...”的解决方法
  • 原文地址:https://www.cnblogs.com/jcz1206/p/3540123.html
Copyright © 2011-2022 走看看