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. P1601 A+B Problem(高精加法)

    [高精度就是一个固定的格式吧] #include<iostream>#include<cstdio>#include<cmath>#include<algor ...

  2. C/C++编译、链接、运行的基础知识

    0.C/C++从源文件在编译器的作用下先编译成.s的汇编,然后在汇编器的作用下变成.o的可重定向目标文件,然后在链接器的作用下变成可执行文件 1.在项目中设置的编译寻找目录中的.h文件(一般就是inc ...

  3. 怎样从外网访问内网Oracle数据库?

    本地安装了一个Oracle数据库,只能在局域网内访问到,怎样从外网也能访问到本地的Oracle数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Oracle数据库 默认安装的Or ...

  4. mysql union 和 left join 结合查询用法

    union 和 left join 结合查询用法 SELECT u.nickname,z.group_comming_type,z.id,z.user_id,z.title,z.create_time ...

  5. JavaScript 条件判断算法综合实战

    在赌场21点游戏中,玩家可以通过计算牌桌上已经发放的卡牌的高低值来让自己在游戏中保持优势,这就叫21点算法. 根据下面的表格,每张卡牌都分配了一个值.如果卡牌的值大于0,那么玩家应该追加赌注.反之,追 ...

  6. html5-Input类型

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>html5-Input类型& ...

  7. Eclipse中手动清理项目缓存,

    用过Eclipse或MyEclipse的小伙伴肯定遇到过这种情况: 代码出错后,在前台访问出问题.然后把代码改好,已经检查不到错误,可是项目在前台访问还是有问题. 这个时候,可能就是Eclipse/M ...

  8. php mysqli 的使用方法

    原文链接:https://blog.csdn.net/solly793755670/article/details/52217456 Mysqli是php5之后才有的功能 需要修改php.ini的配置 ...

  9. 20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结

    20145308 <网络对抗> 逆向及BOF进阶实践 注入shellcode+Return-to-libc攻击 学习总结 实践目的 注入shellcode 实现Return-to-libc ...

  10. 图片上传前 压缩,base64图片压缩 Exif.js处理ios拍照倒置等问题

    曾写过在前端把图片按比例压缩不失真上传服务器的前端和后台,可惜没有及时做总结保留代码,只记得js利用了base64位压缩和Exif.js进行图片处理,还有其中让我头疼的ios拍照上传后会倒置等诸多问题 ...