我的应用程序需要从excel文件中读取数据.我正在使用.Net和c#for development.

在未安装ms office的系统中,如何访问应用程序中的excel文件?

推荐答案

可以 Select 使用OleDB和Excel表格,比如数据库中的数据表...

举个例子.....

string con =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" + 
  @"Extended Properties='Excel 8.0;HDR=Yes;'";    
using(OleDbConnection connection = new OleDbConnection(con))
{
    connection.Open();
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using(OleDbDataReader dr = command.ExecuteReader())
    {
         while(dr.Read())
         {
             var row1Col0 = dr[0];
             Console.WriteLine(row1Col0);
         }
    }
}

本例使用Microsoft.Jet.OleDb.4.0提供程序打开并读取Excel文件.但是,如果文件类型为xlsx(来自Excel 2007和更高版本),则需要下载Microsoft Access Database Engine个组件并将其安装到目标机器上.

提供程序名为Microsoft.ACE.OLEDB.12.0;.请注意,该组件有两个版本,一个用于32位,另一个用于64位.根据应用程序的大小和安装的Office版本(如果有) Select 合适的版本.要让该驱动程序正确地为您的应用程序工作,有很多怪癖.See this question for example

当然,您不需要在目标计算机上安装Office.

虽然这种方法有一些优点,但我认为你应该特别注意你在问题Reading excel files from C#中的 comments 所显示的链接.在正确解释数据类型以及单个excel单元格中的数据长度超过255个字符时,会出现一些问题

.net相关问答推荐

WinForm Task.Wait :为什么它会阻塞 UI?

为什么脚本不从 _Layout 加载并且必须添加到部分视图中?

如何手动注入依赖注入

为什么 .NET 中的 System.Version 定义为 Major.Minor.Build.Revision?

设置日志(log)文件名以在 Log4j 中包含当前日期

注册 COM 互操作与使程序集 COM 可见

什么版本的 .NET 附带什么版本的 Windows?

双倍的? = 双倍? + 双倍?

System.String.Copy 在 .NET 中有什么用?

我可以在没有两个查询的情况下通过布尔标准将 IEnumerable 一分为二吗?

在未安装 Visual Studio 的机器上使用 FUSLOGVW.EXE

仅使用 XAML 绘制纯色三角形

CryptographicException 未处理:系统找不到指定的文件

在关闭警告中访问 foreach 变量

如何使用 EPPlus 设置 XLSX 单元格宽度?

如何将整个字符串与正则表达式匹配?

绑定在代码隐藏中定义的对象

如何为 Dapper 查询动态创建参数

名称 <...> 不存在于命名空间 clr-namespace <...>

从不同程序集中的类名中解析类型