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中,公式--命名管理器中,删除命名区域即可!

  • 相关阅读:
    8.【原创】使用Java8中的Stream特性筛选数据
    27.【转载】如何避免回表查询,什么是索引覆盖
    17.【转载】广东省2020学位英语考试报考须知
    Java 正则?:?=?!的理解
    集合的优化操作
    ArrayList中remove方法和set(null)的区别
    POI 导入、导出Excel
    JS 跳转到新页面并用post传参
    win 10 如何关闭自动更新
    JSON定义及应用
  • 原文地址:https://www.cnblogs.com/jcz1206/p/3540123.html
Copyright © 2011-2022 走看看