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. vue2+animate.css

    下载animate.css并引入项目, import './css/animate.css'使用: <template> <div class="box"> ...

  2. spring使用@Autowired为抽象父类注入依赖

    有时候为了管理或者避免不一致性,希望具体服务统一继承抽象父类,同时使用@Autowired为抽象父类注入依赖.搜了了网上,有些解决方法实现实在不敢恭维,靠子类去注入依赖,那还有什么意义,如下: 父类: ...

  3. java jdbc->mycat->oracle SqlException异常中文信息乱码解决

    mycat字符集gbk oracle字符集gbk 原jdbc连接串: base.jdbc.url=jdbc:mysql://127.0.0.1:3306/XXX?useUnicode=true& ...

  4. python之字符编码(四)

    一.字符编码的使用: 1.文本编辑器 unicode----->encode-------->utf-8 utf-8-------->decode---------->unic ...

  5. 02: pycharm远程linux开发和调试代码

    1.1 配置远程linux主机信息 参考博客:https://www.cnblogs.com/lei0213/p/7898301.html 1) 选择Tools--Deployment--Config ...

  6. python简说(二十二)写日志

    分四个级别 import nnloglog = nnlog.Logger('book_server.log') log.debug('xxx值是什么')log.info('调用了什么xxx')log. ...

  7. vue2.0之echarts使用

    1.首先下载echart依赖 npm install echarts --save备注:npm 安装报错时使用cnpm 2.全局注册 在main.js里引入echart并在vue中注册echart / ...

  8. phpstorm官方教程

    https://confluence.jetbrains.com/pages/viewpage.action?pageId=15801728

  9. kaggle竞赛_mnist_10%

      主要是通过mnist了解kaggle的操作细节,最终这里的结果为: 引入必须的库¶ import pandas as pd import numpy as np import matplotlib ...

  10. bzoj 4591 超能粒子炮·改 - Lucas

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...