using System;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Text; namespace DaliyTest
{
public class ExcelToDataTable : IWork
{
public void Work()
{
var path = AppDomain.CurrentDomain.BaseDirectory + "读取文件"; if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
} //文件路径
var filePath = Directory.GetFiles(path).FirstOrDefault();
var fileNames = filePath.IndexOf("\\", StringComparison.Ordinal) != ? filePath.Split('\\') : new[] { filePath }; //文件名
var fileName = fileNames[fileNames.Length - ]; var ds = GetExcelData(filePath, fileName, "sheet名称"); var newsList = new List<News>(); foreach (DataRow item in ds.Tables[].Rows)
{
var news = new News
{
Name = StringUtil.NullToEmpty(item[""]),
Title = StringUtil.NullToEmpty(item[""]),
Link = StringUtil.NullToEmpty(item[""])
}; newsList.Add(newsNagative);
};
} /// <summary>
/// 将Excel转为DataSet
/// </summary>
/// <param name="filepath">文件路径</param>
/// <param name="filename">文件名</param>
/// <param name="_sheetName">sheet名</param>
/// <returns>DataSet</returns>
public static DataSet GetExcelData(string filepath, string filename, string _sheetName)
{
var dtExcel = new DataSet(); if (string.IsNullOrEmpty(filepath)) return dtExcel; try
{
string connString;
var extension = Path.GetExtension(filepath); switch (extension)
{
case ".xls":
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath +
";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
case ".xlsx":
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath +
";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
break;
default:
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath +
";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
} using (var conn = new OleDbConnection(connString))
{
conn.Open(); var dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new object[] { null, null, _sheetName, null });
conn.Close(); var builder = new StringBuilder(string.Format("SELECT * FROM [{0}$] WHERE 1=1 ", _sheetName)); foreach (DataRow row in dt.Rows)
{
builder.AppendFormat(" AND {0} IS NOT NULL AND {0} <> '' ", row["Column_name"]);
} conn.Open();
using (var oledAdapter = new OleDbDataAdapter(builder.ToString(), conn))
{
oledAdapter.Fill(dtExcel);
}
}
}
catch (Exception ex)
{
throw new Exception("Open xls file error\n\r" + ex.Message, ex);
} return dtExcel;
}
}
}
 public static class StringUtil
{
public static string NullToEmpty(object sValue)
{
if (sValue == DBNull.Value)
return "--";
return sValue == null ? "--" : ToDBC(sValue.ToString().Trim());
} /// <summary>
/// 转半角
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String ToDBC(this String input)
{
var c = input.ToCharArray();
for (int i = ; i < c.Length; i++)
{
if (c[i] == )
{
c[i] = (char);
continue;
}
if (c[i] > && c[i] < )
c[i] = (char)(c[i] - );
}
return new String(c);
}
}

如果报错:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序

本错误是由于你使用了ACCESS2007版本建立的数据库,但服务器中没有相配合使用的程序,所以出错.

解决办法1:(验证可以)

http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下载。然后安装就行了。

或者百度网盘下载 下载地址

解决办法2: (未验证)

选择 该应用程序的 应用程序池 ------>选择高级设置 --------->启用32位应用程序 ------->true

【C#】采用OleDB读取Excel文件转DataTable的更多相关文章

  1. 读取excel 文件到datatable

    上一篇文章介绍了将datatable 内容导出到excel 文件,这里介绍如何将一个excel 文件读取出来,并保持到datatable 中,实际这样的应用场景也是经常遇到的. 这里继续使用了Micr ...

  2. 读取Excel文件到DataTable中

    private static string[] GetExcelSheetNames(OleDbConnection conn)        {            DataTable dtbSh ...

  3. C# 读取EXCEL文件的三种经典方法

    1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...

  4. ASP.NET读取EXCEL文件的三种经典方法(转)

    1.方法一:采用OleDB读取EXCEL文件:  把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:public DataSet ExcelToDS(string Path) {  str ...

  5. ASP.NET读取EXCEL文件的三种经典方法

      1.方法一:采用OleDB读取EXCEL文件:   把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { ...

  6. asp.net读取excel文件多种方法

    asp.net读取excel文件的三种方法示例,包括采用OleDB读取Excel文件.引用的com组件读取Excel文件.用文件流读取.   方法一:采用OleDB读取Excel文件 把Excel文件 ...

  7. 读取Excel文件的两种方法

    第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...

  8. (转)C# 读取EXCEL文件的三种经典方法

    原文地址http://www.open-open.com/code/view/1420029490093 1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取 ...

  9. .NET读取Excel文件的三种方法的区别

    ASP.NET读取Excel文件方法一:采用OleDB读取Excel文件: 把Excel文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(strin ...

随机推荐

  1. 在Linux 中如何从进程相关的文件描述中恢复数据

    在Linux中误删除了某个文件,但是 ps-ef|grep 文件名 发现某个进程还在使用该文件,那么可以通 过以下方式恢复文件. 例如:创建一个简单文件/tmp/test.txt, 随便向里面写点内容 ...

  2. The Little Prince-12/15

    The Little Prince-12/15 明天四六级考试了呢!!!喵喵喵,愿大家都能取得好成绩. 星星美丽,因为里面有一朵看不见的花. 沙漠美丽,因为沙漠的某处隐藏着一口井. ————生活美好, ...

  3. 怎样从外网访问内网php-fpm?

    本地安装了一个php-fpm,只能在局域网内访问,怎样从外网也能访问到本地的php-fpm呢?本文将介绍具体的实现步骤. 准备工作 安装并启动php-fpm 默认安装的php-fpm端口是9000. ...

  4. RTP协议全解析(H264码流和PS流)(转)

    源: RTP协议全解析(H264码流和PS流)

  5. AngularJS中angular.min.js:80 Error: [ng:areq] http://errors.angularjs.org/1.2.9/ng/areq

    报出来的时候,出现这种错误,是因为在引入控制器的时候没有引入成功,我遇到这个错误是在因为没有将父控制器引入到子控制器中.

  6. 树莓派安装cobbler,自动化安装CentOS

    安装python.相关python模块.apache sudo apt-get install python python2.7 python-django python-netaddr python ...

  7. 2、pandas的value_counts()和describe()

    一.value_counts pandas 的value_counts()函数可以对Series里面的每个值进行计数并且排序. value_counts是计数,统计所有非零元素的个数,默认以降序的方式 ...

  8. Debian\CentOS Linux配置管理

    CentOS 6 安装 gcc-4.8 以支持 C++11 1.下载 repo 文件 wget http://people.centos.org/tru/devtools-2/devtools-2.r ...

  9. Babel总结

    什么是babel? babel是一个JavaScript编译器. Babel是一个工具链,主要用于将ECMAScript 2015+代码转换为向后兼容的旧浏览器或环境中JavaScript版本. 注解 ...

  10. Codeforces 868C Qualification Rounds - 位运算

    Snark and Philip are preparing the problemset for the upcoming pre-qualification round for semi-quar ...