小言_互联网的博客

C# 读取 Excel

259人阅读  评论(0)

(问题)总结

(记录的是所知的,有些不全或欠缺知道方向就行了)
C# 读取 Excel出现问题
总结:
Excel版本导致的Provider、Extended Properties不同
Excel的格式不一样,右键新建xml,软件内新建xlsx
表名加方括号
拓展字那里Excel 8.0,要有空格
导包,除了最后一个要加,其它三个也不知道具体作用(都加吧,第一个是为了导出正确格式,没用到)

(不确定其具体作用,因为报错信息有没有变没印象)
开启32位线程池
安装32位AccessDatabaseEngine

之前的代码(不完整)

            //connect
            string source = @"D:\Data\Projects\VisualStudio\VisualStudio2019\Unity Siki CSharp高级\79 Excel\Excel.xls";
            string connectionString = "Provider = Microsoft.Jet.OLEDB.4.0;" 
                + "Data Source=" + source +";"
                + "Extended Properties=\"Excel8.0;HDR=YES;IMEX=1\"" ;
            OleDbConnection oleDbConnection = new OleDbConnection(connectionString);

            //query
            oleDbConnection.Open();
            string tableName = "Excel$";
            string sql = "select * from "+ tableName;
            OleDbDataAdapter adapter = new OleDbDataAdapter(sql, oleDbConnection);

之后的代码(完整)

using System;
using System.Data;
using System.Data.OleDb;

namespace _79_Excel
{
   
    class Program
    {
   
        static void Main(string[] args)
        {
   

            //connect
            string source1 = @"D:\Data\Projects\VisualStudio\VisualStudio2019\Unity Siki CSharp高级\79 Excel\Excel.xls";//新建xlsx,改为xls
            string source2 = @"D:\Data\Projects\VisualStudio\VisualStudio2019\Unity Siki CSharp高级\79 Excel\Excel_2003.xls";//新建xls
            string source3 = @"D:\Data\Projects\VisualStudio\VisualStudio2019\Unity Siki CSharp高级\79 Excel\Excel_2007.xlsx";//新建xlsx
           string source4 = @"D:\Data\Projects\VisualStudio\VisualStudio2019\Unity Siki CSharp高级\79 Excel\Excel_2007_xlsx.xlsx";//在Excel里面新建文件            	
           string connectionString = "Provider = Microsoft.ACE.OLEDB.12.0;";
            connectionString += "Data Source=" + source4 + ";";
            connectionString += "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";

            //string connstr = "Provider=Microsoft.ACE.OLEDB.12.0; Persist Security Info=False;Data Source=" + @Excfilename + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'";
            /**
             * Microsoft.ACE.OLEDB.12.0 == xlsx
             * Microsoft.Jet.OLEDB.8.0 == xls
             * Excel12.0 ==xlsx Excel18.0==xls
             * HDR  首行是不是标题
             * IMEX 0只写 1只读 2读写
             * Extended Properties="'......'",可以
             * Extended Properties="/"....../"",可以
             */



            OleDbConnection oleDbConnection = new OleDbConnection(connectionString);

            //query
            oleDbConnection.Open();
            string tableName1 = "Excel$";
            string tableName2 = "Excel_2003$";
            string tableName3 = "Excel_2007$";
            string tableName4 = "[Sheet1$]";
            string sql = "select * from "+ tableName4;
            OleDbDataAdapter adapter = new OleDbDataAdapter(sql, oleDbConnection);

            //DataSet
            DataSet dataSet = new DataSet();//容器
            adapter.Fill(dataSet);

            //close
            oleDbConnection.Close();


            //table
            DataTableCollection tableCollection = dataSet.Tables;
            DataTable dataTable = tableCollection[0];//第一张表

            //row
            DataRowCollection rowCollection = dataTable.Rows;
            foreach (DataRow dataRow in rowCollection)
            {
   
                for(int i=0;i<rowCollection.Count;i++)
                {
   
                    Console.Write(dataRow[i] + "\t");

                }
                Console.WriteLine();
            }


            Console.ReadKey();
        }
    }
}

(Done,不确定具体作用)系统没有“internet信息服务(IIS)管理器”

练习VS中读取Excel(.xls)文件时,出现对"Provider = Microsoft.Jet.OLEDB.4.0;"的 在本地机器未注册, 需要启用“Internet 信息服务(IIS)管理器”功能,并且将程序池水设置为32true

(Done)‘Microsoft.Jet.OLEDB.4.0’ provider is not registered on the local machine.”

系统没有“internet信息服务(IIS)管理器”

(Done)在电脑上没有找到服务WAS

在计算机“.”上没有找到WAS服务

将项目的AnyCpu改成x86,
不知道什么时候,发现.xls的绿色图标加载出来

(Done,但不确定具体起作用)找不到msexcl40.dll,Regsvr32加载失败

(没用)System.Data.OleDb.OleDbException:“找不到可安装的 ISAM。”(卡住)

【未解决】System.InvalidOperationException: 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
没用,把IMEX=1’去掉就行了

(需知)拓展字Excel版本

Excel拓展字介绍
Excel是2003还是2007还是怎么看

(Done)找不到Microsoft.ACE.OLEDB.12.0

System.InvalidOperationException:“The ‘Microsoft.ACE.OLEDB.4.0’ provider is not registered on the local machine.”
xls是2003,Microsoft.Jet.OLEDB.4.0
xlsx是2007,Microsoft.ACE.OLEDB.12.0
两个都是Excel 8.0

下载AccessDatabaseEngine
安装32还是64,电脑64;之前也提到32位程序池。先试64(两者安装冲突),结果是32位

(继续显示)System.Data.OleDb.OleDbException:“找不到可安装的 ISAM。”

(Done)System.Data.OleDb.OleDbException:“外部表不是预期的格式。”

8.0那里空了个格,要空格。就是这样ISAM错误没了,虽然出现其他错误

            string connectionString = "Provider = Microsoft.ACE.OLEDB.12.0;";
            connectionString += "Data Source=" + source + ";";
            connectionString += "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";

(Done)Excel文件问题

//新建xlsx,改为xls(我选的,常用xlsx,视频是xls,所以有改了回来)
//新建xls
//新建xlsx

(没用)外部表不是预期的格式

c#.net:System.Data.OleDb.OleDbException: 外部表不是预期的格式的解决办法

(Done)Excel可能不是标准的xls,而是关于xml

检测该文件是否为标准的.xls的文件

先打开Excel,再新建文件。不要再资源管理器里面鼠标右键
还有直接复制粘贴其他表格的内容,可能也有问题。自己手敲吧。(试了没问题)

(新进展,完成)System.Data.OleDb.OleDbException:“FROM 子句语法错误。”

补上表名中的方括号

(完成)打印


转载:https://blog.csdn.net/weixin_39538253/article/details/116217949
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场