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. Redis Windows 安装

    摘自:https://www.cnblogs.com/M-LittleBird/p/5902850.html 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的wind ...

  2. 爬虫学习06用selenium爬取空间

    用selenium爬取空间 from selenium import webdriver from lxml import etree import time pro = webdriver.Chro ...

  3. MyEclipse如何配置Struts2源码的框架压缩包

    1.MyEclipse如何配置Struts2源码的框架压缩包 如本机的Struts2框架压缩包路径为:D:\MyEclipseUserLibraries\struts\struts-2.3.15.3- ...

  4. 获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备

    /** * 获取ip */ public static function getIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CL ...

  5. JSch : channel never closed or EOF 通道未关闭

    最近,我们的项目在开发远程节点管理的时候,使用了jsch库.在测试的时候发现有个节点在cmd执行完成之后,channel.isClosed()一直都是false,导致请求无法返回,但是其它有些节点就没 ...

  6. Linux和windows之间使用scp无密码传输文件,脚本自动化

    1.环境 windows2008 R2 和rhel 6.5 2.需求 通过在windows上指定计划任务,自动完成从Linux系统上备份文件到windows 3.工具 win: SSH Secure ...

  7. NT1_keras下搭建一个3层模型并且修改。

    In [1]: import keraskeras.__version__ C:\ProgramData\Anaconda3\lib\site-packages\h5py\__init__.py:36 ...

  8. java常用类-String类

    * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A:字符串字面值"abc"也可以看成是一个字符串对象. * B:字符串是 ...

  9. win10中命令操作Zookeeper

    目录 zk客户端命令: 连接: 命令: 四字命令: 常用命令: 返回参数说明: 参考: zk客户端命令: 连接: C:\Users\qhong\Desktop $ zkCli.cmd -server ...

  10. How Flyway works

    The easiest scenario is when you point Flyway to an empty database. It will try to locate its schema ...