我现在在做一个程序能根据不同的要求自动删除Excel中的无用行,但是现在的问题是就是打不开那种通过程序导出来的excel,我试过自己新建测试的excel,可以通过运行,但是那种导出来的就是打不开,现在试过通过Application的方法,还有ADO.NET的方法,还有导入SQL Server的方法了,都没有通过。请问还有别的办法么???还有我发现程序导出的excel下面sheet1的那个位置是文字信息,每次查询时就是那个报错,所以在请问一下,如果可以那个地方怎么改?如果可以的话,把代码贴出来让我学习一下。
大家都帮着想想办法吧,谢谢!
上传一个excel(那种程序导出的),以供大家测试~~~~
http://download.csdn.net/source/1162971(不要资源分)

解决方案 »

  1.   

    楼主,你的这个EXCEL文件不是一般意思上的EXCEL文件,
    一般意思的EXCEL文件是指工作簿(WorkBook),你的这个文件是工作表(WorkSheet),
    且是Excel 工作表2.1版本的
    没办法用ADO.Net直接连接楼主可以先打开这个文件,然后选择文件->另存为,
    保存类型选择为  Microsoft Office Excel 工作簿
    然后再通过ado.net访问
    另外,访问excel里工作表(sheet)时,工作表的名称一般要变通一下,就是在原工作表名的后面加$,然后用[]界定起来
    例如原来工作表名为 abc,访问是使用[abc$]
    下面是另存后你的文件通过ado.net访问的代码            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                        "Extended Properties=Excel 8.0;" +
                                        "data source=E:\\皖A-A9445  121.XLS";            OleDbConnection conn = new OleDbConnection( connStr );
                conn.Open();            DataTable dt= conn.GetOleDbSchemaTable( System.Data.OleDb.OleDbSchemaGuid.Tables, null );
                // 查询语句
                string sql = "SELECT * FROM [皖A-A9445  121$]";            DataSet ds = new DataSet();
                OleDbDataAdapter da = new OleDbDataAdapter( sql,conn );
                da.Fill( ds );    // 填充DataSet        
                dt = ds.Tables[0];
                // 在这里对DataSet中的数据进行操作                    // 输出,绑定数据
                dataGridView1.DataSource = dt;            conn.Close();
      

  2.   

    DataTable dt= conn.GetOleDbSchemaTable( System.Data.OleDb.OleDbSchemaGuid.Tables, null );
    这句楼主可以删除,我用来测试获取表名称的
      

  3.   

    程序下载不了.我想你的文件中是excel格式的.可能是html格式的.你用记事本打开试试.可能是ascii字符.
      

  4.   

    就在你程序里生成表名的地方改呗。
    注意表名不要用那些奇怪的字符,也不要用中文开头,
    有些sb英文OS不太识别。