C#将EXCEL显示到datagridview时遇到”找不到可安装的ISAM”故障

lianggg911 2020-09-27 03:47:11
大家好,最近我在用C#将EXCEL显示到datagridview时遇到找不到可安装的ISAM故障,按照网上的解决方法将'Excel 12.0;HDR=YES;IMEX=1'两边加上单引号,运行程序故障依旧;后来在“运行”对话框中:Regsvr32 C:\Windows\SysWOW64\msexcl40.dll ,显示DllRegisterServer在C:\Windows\SysWOW64\msexcl40.dll已成功,然后运行程序故障依旧。我看网上基本就是这2种方法,现在请教大家看看我的程序哪有问题。谢谢EXCEL的版本不同,在Extended Properties='Excel 12.0;HDR=YES;IMEX=1'语句中要不要修改EXCEL后面的版本号?我的电脑装的是WPS OFFICE的WPS校园版,这是是不是不行,要装microsoft office才行?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable dt = new DataTable();

private void btnSure_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();//首先根据打开文件对话框,选择excel表格
fd.Filter = "表格|*.xlsx;*.xls";//打开文件对话框筛选器
string strPath;//文件完整的路径名
if (fd.ShowDialog() == DialogResult.OK)
{
try
{
strPath = fd.FileName;

string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";//不能是11.0
OleDbConnection Con = new OleDbConnection(strCon);//建立连接
string strSql = "select * from [Sheet1$]";//表名的写法也应注意不同,对应的excel表为sheet1,在这里要在其后加美元符号$,并用中括号
OleDbCommand Cmd = new OleDbCommand(strSql, Con);//建立要执行的命令
OleDbDataAdapter da = new OleDbDataAdapter(Cmd);//建立数据适配器
DataSet ds = new DataSet();//新建数据集
da.Fill(ds);//把数据适配器中的数据读到数据集中的一个表中(此处表名为shyman,可以任取表名)
//指定datagridview1的数据源为数据集ds的第一张表(也就是shyman表),也可以写ds.Table["shyman"]

dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);//捕捉异常
}
}
}

private void btnQuit_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
...全文
2351 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
NPOI.dll 这个方便使用, 你说的问题我一次没碰上过。。。
weixin_42199545 2020-09-28
  • 打赏
  • 举报
回复

Workbook workbook = new Workbook();
workbook.LoadFromFile("Excel.xlsx");
Worksheet sheet = workbook.Worksheets[0];
datatable = sheet.ExportDataTable(); 
this.dataGridView1.DataSource = datatable;
需要引用free spire.xls dll,在nuget包管理器搜索安装
X-i-n 2020-09-27
  • 打赏
  • 举报
回复
C#使用对象模型操作EXCEL。优点:微软官方的方案,兼容性好,对象模型的使用方式更符合人的直观认知,上手成本极低,如果本身具备一点VBA基础,这个成本还能再打一个很大的折扣;缺点:需要电脑上安装Office。 https://blog.csdn.net/weixin_42764060/article/details/90145351 官方的另一种就是你发的这个:OLEDB数据库引擎读写EXCEL,缺点是非常繁琐,而且需要有数据库驱动(因为我没用过这种方案,所以不清楚这个驱动是由谁来提供,如果由Office来提供,就需要电脑上安装Office)。 =========================== 其它第三方方案兼容性一般,尤其在混用WPS和Office对文档进行编辑的时候,很容易报错。有些可能还要收费。 C#使用EPPlus读excel。优点:使用习惯接近Office的对象模型。 https://blog.csdn.net/birdfly2015/article/details/90607323 C#使用NPOI读写EXCEL。 https://blog.csdn.net/vblegend_2013/article/details/79483391 除此之外,还有Spire.XLS,这个没用过,不方便评价。 =============== 不光Excel,Word也可以使用类似的方案进行程序化处理。
lianggg911 2020-09-27
  • 打赏
  • 举报
回复
你好,不太懂您说的。我是个新手。什么是用对象模型?什么是保证OFFICE环境?
X-i-n 2020-09-27
  • 打赏
  • 举报
回复
单纯读内容的话,如果有OFFICE环境,用对象模型是最省事的方案;如果不能保证具备OFFICE环境,可以试试第三方的扩展,像EPPlus、NPOI这些都可以脱离Office环境使用。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧