(问题)总结
(记录的是所知的,有些不全或欠缺知道方向就行了)
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.”
(Done)在电脑上没有找到服务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
先打开Excel,再新建文件。不要再资源管理器里面鼠标右键
还有直接复制粘贴其他表格的内容,可能也有问题。自己手敲吧。(试了没问题)
(新进展,完成)System.Data.OleDb.OleDbException:“FROM 子句语法错误。”
补上表名中的方括号
(完成)打印
转载:https://blog.csdn.net/weixin_39538253/article/details/116217949