using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Data;
using System.IO;
using System.Data.OleDb;
using Aspose.Cells; namespace Common
{
public class CSV
{
/// <summary>
/// "HDR=Yes;"声名第一行的数据为域名,并非数据。
/// 这种方式读取csv文件前8条为int类型后面为string类型 则后面数据读取不了
/// 还存在乱码问题
/// </summary>
/// <param name="fullPath"></param>
/// <returns></returns>
public static DataTable Read(string fullPath)
{
FileInfo fileInfo = new FileInfo(fullPath);
DataTable table = new DataTable();
string connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileInfo.DirectoryName + ";Extended Properties='Text;HDR=YES;FMT=Delimited;IMEX=1;'";
string cmdstring = String.Format("select * from [{0}]", fileInfo.Name); using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(cmdstring, conn);
adapter.Fill(table); conn.Close();
} return table;
} public static List<string> Read2(string fullpath)
{
DataTable table = CSV.Read(fullpath);
List<string> records = new List<string>(); foreach (DataRow row in table.Rows)
{
records.Add(row[].ToString());
} return records;
} public static string ExportToCSV(DataTable table)
{
StringBuilder sb = new StringBuilder(); for (int i = ; i < table.Columns.Count; i++)
{
if (i == table.Columns.Count - )
{
sb.Append(table.Columns[i].Caption);
}
else
{
sb.AppendFormat("{0},", table.Columns[i].Caption);
}
}
sb.Append(Environment.NewLine); for (int index = ; index < table.Rows.Count; index++)
{
StringBuilder sb2 = new StringBuilder();
DataRow row = table.Rows[index]; for (int i = ; i < table.Columns.Count; i++)
{ string input = row[i].ToString();
string format = "{0}";
if (input.Contains(","))
{
format = "\"{0}\"";
} if (i == table.Columns.Count - )
{
sb.Append(String.Format(format, ReplaceSpecialChars(input)));
}
else
{
sb.AppendFormat(format + ",", ReplaceSpecialChars(input));
}
} if (index < table.Rows.Count - )
sb.Append(Environment.NewLine);
} return sb.ToString();
} public static void ExportToCSVFile(DataTable table, string filename)
{
// using (StreamWriter sw = new StreamWriter(filename, false,Encoding.UTF8))
using (StreamWriter sw = new StreamWriter(filename, false))
{
string text = ExportToCSV(table);
sw.WriteLine(text);
}
} public static string ReplaceSpecialChars(string input)
{
// space -> _x0020_ 特殊字符的替换
// % -> _x0025_
// # -> _x0023_
// & -> _x0026_
// / -> _x002F_
if (input == null)
return "";
//input = input.Replace(" ", "_x0020_");
//input.Replace("%", "_x0025_");
//input.Replace("#", "_x0023_");
//input.Replace("&", "_x0026_");
//input.Replace("/", "_x002F_"); input = input.Replace("\"", "\"\""); return input;
} public static DataTable ReadExcel(string fullpath, string sheetname = "sheet1$")
{
DataTable table = new DataTable(); string connectionstring = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;';", fullpath);
//string cmdstring = "select * from [sheet1$]";
string cmdstring = "select * from [" + sheetname + "]"; using (OleDbConnection conn = new OleDbConnection(connectionstring))
{
conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(cmdstring, conn);
adapter.Fill(table); conn.Close();
} return table;
} public static DataTable ExcelDs(string filenameurl)
{
string strConn = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", filenameurl); ;
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
//返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 
DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
//包含excel中表名的字符串数组
string[] strTableNames = new string[dtSheetName.Rows.Count];
for (int k = ; k < dtSheetName.Rows.Count; k++)
{
strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
} OleDbDataAdapter odda = new OleDbDataAdapter("select * from [" + strTableNames[] + "]", conn);
DataTable ds = new DataTable(); odda.Fill(ds); conn.Close();
conn.Dispose();
return ds;
} public static DataTable ReadExcelTopVersion(string fullpath, string sheetname = "sheet1$")
{
DataTable table = new DataTable(); //我测试用下
//string connectionstring = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;';", fullpath); //这个是正确的
string connectionstring = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", fullpath);
//string cmdstring = "select * from [sheet1$]";
string cmdstring = "select * from [" + sheetname + "]"; using (OleDbConnection conn = new OleDbConnection(connectionstring))
{
conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(cmdstring, conn);
adapter.Fill(table); conn.Close();
} return table;
} public static List<string> ReadExcel2(string fullpath)
{
List<string> records = new List<string>();
DataTable table = CSV.ReadExcel(fullpath); foreach (DataRow row in table.Rows)
{
records.Add(row[].ToString());
} return records;
} /// <summary>
/// 使用Aspose方法读取csv文件
/// 当前8条数据为int类型,后面数据为string类型,会报错
/// 乱码文件正确读取
/// </summary>
/// <param name="fullpath"></param>
/// <returns></returns>
public static DataTable ReadCSVByAspose(string fullpath)
{
Workbook workbook = new Workbook(fullpath);
Cells cells = workbook.Worksheets[].Cells;
DataTable data = cells.ExportDataTable(, , cells.MaxDataRow, cells.MaxDataColumn + , true);
return data;
} /// <summary>
/// sun : use ace.oledb, not use jet.oledb
/// </summary>
/// <param name="excelFilename"></param>
/// <returns></returns>
public static DataTable ReadCSVByACEOLEDB(string excelFilename)
{
string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"{0}\";Extended Properties=\"Text\"", Directory.GetParent(excelFilename));
DataSet ds = new DataSet();
string fileName = string.Empty;
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionString))
{
connection.Open();
fileName = Path.GetFileName(excelFilename); string strExcel = "select * from " + "[" + fileName + "]";
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, connectionString);
adapter.Fill(ds, fileName);
connection.Close();
//tableNames.Clear();
}
return ds.Tables[fileName];
} }
}

备注: 需要安装引擎

服务器未安装office软件的时候,使用连接字符串,读取excel失败的解决办法,下载 安装即可

Microsoft Access Database Engine 2010 Redistributable

 

对应的excel连接字符串:

"Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + filepath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";

常用类-CSV---OLEDB的更多相关文章

  1. Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver

    ========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...

  2. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  3. Java集合常用类特点整理

    集合的结构如下图所示: 集合的两个顶级接口分别为:Collection和Map Collection下有两个比较常用的接口分别是List(列表)和Set(集),其中List可以存储重复元素,元素是有序 ...

  4. Java集合框架(常用类) JCF

    Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...

  5. java-API中的常用类,新特性之-泛型,高级For循环,可变参数

    API中的常用类 System类System类包含一些有用的类字段和方法.它不能被实例化.属性和方法都是静态的. out,标准输出,默认打印在控制台上.通过和PrintStream打印流中的方法组合构 ...

  6. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  7. iOS 杂笔-24(常用类到NSObject的继承列表)

    iOS 杂笔-24(常用类到NSObject的继承列表) NSString NSObject->NSString NSArray NSObject->NSArray ↑OC基本类都直接继承 ...

  8. java的eclipse操作和常用类Object的使用

    1.eclipse的快捷键: (1)alt + /   内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + a ...

  9. java总结第四次//常用类

    六.常用类 主要内容:Object类.String类.Date类.封装类 (一)Object类 1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则 ...

  10. JAVA基础知识之IO——Java IO体系及常用类

    Java IO体系 个人觉得可以用"字节流操作类和字符流操作类组成了Java IO体系"来高度概括Java IO体系. 借用几张网络图片来说明(图片来自 http://blog.c ...

随机推荐

  1. 第二次作业-titanic数据集练习

    一.读入titanic.xlsx文件,按照教材示例步骤,完成数据清洗. titanic数据集包含11个特征,分别是: Survived:0代表死亡,1代表存活Pclass:乘客所持票类,有三种值(1, ...

  2. 为什么使用HTTP2?

    最近我们公司的官网由原来的http1.1已升级到http2,而我们前端开发对http2还是一片懵懂,更不知道为何换成了这个,故此补充了下http2的相关知识. http1.1相比于http1.0有哪些 ...

  3. Winform中实现将照片剪贴到系统剪切板中(附代码下载)

    场景 效果 点击剪切按钮 点击粘贴按钮 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免 ...

  4. Redis集群与分布式介绍以及搭建Redis-Cluster

    1 Redis集群 1.1 什么是集群 集群就是很多服务器组成的一个网络.指的是将多台服务器集中在一起,实现同一业务. 1.2 为什么要集群 一台服务器不能满足开发需要的时候,需要多台服务器来支持.这 ...

  5. PMBOK 指南 第二章 项目运行环境

    2.1概述 事业环境因素(EEF)源于项目外部(往往企业外部) 组织过程资产(OPA)源于企业内部 2.2 事业环境因素 项目团队不能控制 2.2.1 组织内部的事业环境因素 组织文化.结构和治理 设 ...

  6. 最近学习了Http连接池

    起因 6.1大促值班发现的一个问题,一个rpc接口在0~2点用户下单高峰的时候表现rt高(超过1s,实际上针对性优化过的接口rt超过这个值也是有问题的,通常rpc接口里面即使逻辑复杂,300ms应该也 ...

  7. 关于python中的增量赋值的理解

    增量赋值运算符 += 和 *= 的表现取决于它们的第一个操作对象 += 操作首先会尝试调用对象的 __ iadd__方法,如果没有该方法,那么尝试调用__add__方法,所以+= 与 + 的区别实质是 ...

  8. Apply Grouping to List View Data 将分组应用于列表视图数据

    This lesson will teach you how to apply grouping to List View data. For this purpose, you will group ...

  9. CVE-2019-0708漏洞复现

    前言: 该漏洞前段时间已经热闹了好一阵子了,HW期间更是使用此漏洞来进行钓鱼等一系列活动,可为大家也是对此漏洞的关心程度,接下里就简单的演示下利用此漏洞进行DOS攻击.当然还有RCE的操作,这只演示下 ...

  10. 大疆无人机 Android 开发总结——视频解码

    DJI_Mobile_SDK是大疆为开发者提供的开发无人机应用的开发接口,可以实现对无人机飞行的控制,也可以利用无人机相机完成一些视觉任务.目前网上的开发教程主要集中于DJI 开发者社区,网上的资源非 ...