c#怎么c读取excel文件 源码数据库

C#使用OleDb读取Excel,生成SQL语句 - 推酷
C#使用OleDb读取Excel,生成SQL语句
C#使用OleDb读取Excel,生成SQL语句
& & & 之前在
也要对读取Excel文件,那时用的是
Microsoft.Office.Interop.Excel组件,有一个致命的问题:读取效率低到不能忽略。所以一直想着有机会去换一个读取的机制,上网google了下,发现使用OleDb读写的效率是很不错的,所以在写把Excel的数据导成SQL语句的工具时,我就使用了OleDb,效率那是毫无疑问的。其实使用
Microsoft.Office.Interop.Excel组件去读取Excel是相当于打开一个excel程序,而OleDb其实就是对Excel按数据库的方式进行读写。
& & &少说废话,直接贴代码
using System.Collections.G
using System.L
using System.T
using System.IO;
using System.R
using Excel = Microsoft.Office.Interop.E
using System.D
using System.Data.OleDb;
using System.Windows.F
namespace ReadXlsxData
static class ParseXlsx
public static readonly int COMMENT_INDEX=4;
//字段说明行下标
public static readonly int KEY_INDEX = 5;
//主键行下标
public static readonly int TYPE_INDEX = 6;
//字段类型行下标
public static readonly int SQLNAME_INDEX = 7;
//数据库字段名行下标
public static readonly int VALUE_INDEX = 8;
//value 行下标
public static StringBuilder objectData = new StringBuilder();
public static DataTable ToDataSet(string filePath)
string connStr = &&;
string fileType = System.IO.Path.GetExtension(filePath);
if (string.IsNullOrEmpty(fileType))
if (fileType == &.xls&)
connStr = &Provider=Microsoft.Jet.OLEDB.4.0;& + &Data Source=& + filePath + &;& + &;Extended Properties=\&Excel 8.0;HDR=NO;IMEX=1\&&;
connStr = &Provider=Microsoft.ACE.OLEDB.12.0;& + &Data Source=& + filePath + &;& + &;Extended Properties=\&Excel 12.0;HDR=NO;IMEX=1\&&;
string sql_F = &Select * FROM [{0}]&;
OleDbConnection conn =
OleDbDataAdapter da =
DataTable dataTable = new DataTable();
// 初始化连接,并打开
conn = new OleDbConnection(connStr);
conn.Open();
da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(String.Format(sql_F, &Sheet1$&), conn);
da.Fill(dataTable);
catch (Exception ex)
// 关闭连接
if (conn.State == ConnectionState.Open)
conn.Close();
da.Dispose();
conn.Dispose();
conn.Close();
da.Dispose();
conn.Dispose();
return dataT
public static string ReadExcelFile(string namef, string sqlfile, string sqlcomment)
objectData.Clear();
DataTable dt = ToDataSet(namef);
string temp, key,temp1,temp2;
List&int& index = new List&int&();
//创建表头
objectData.Append(&DROP TABLE IF EXISTS `& + sqlfile + &`;\n&);
objectData.Append(&CREATE TABLE `& + sqlfile + &` (\n&);
int columnSize = dt.Columns.C
int rowSize = dt.Rows.C
temp = string.E
key = string.E
temp1 = string.E
temp2 = string.E
DataRow dr5 = dt.Rows[COMMENT_INDEX],dr9=dt.Rows[SQLNAME_INDEX],dr8=dt.Rows[TYPE_INDEX];
for (int i = 1; i & columnS i++)
dc = dt.Columns[i];
temp2 = dr5[dc].ToString();
temp1 = dr9[dc].ToString();
if (temp2 == string.Empty)//空列判断
else if (temp1.ToString() != string.Empty)
//数据库字段
index.Add(i);
temp = dr8[dc].ToString();
if (temp.Contains(&vachar&))
objectData.Append(&\t`& + temp1 + &` & + temp + & NOT NULL DEFAULT '' COMMENT '& + temp2 + &',\n&);
objectData.Append(&\t`& + temp1 + &` & + temp + & NOT NULL DEFAULT '0' COMMENT '& + temp2 + &',\n&);
temp = dt.Rows[KEY_INDEX][dc].ToString();
if (temp != null && temp.Contains(&key&))
key += &`& + temp1 + &` &;
if(key!=string.Empty)
objectData.Append(&\tPRIMARY KEY (& + key + &)\n&);
objectData.Append(&) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='& + sqlcomment + &';\n&);
for (int i = VALUE_INDEX; i & rowS i++)
//读取数据记录
objectData.Append(&INSERT INTO `& + sqlfile + &` VALUES ('&);
dr = dt.Rows[i];
int length = index.C
for (int j = 0; j & j++)
objectData.Append(dr[index[j]] + &','&);
objectData.Remove(objectData.Length - 3, 2);
objectData.Append(&);\n&);
return objectData.ToString();
&注:这段代码去掉了通用性,只考虑了读取Excel第一个sheet的情况。
& & 下面附上自己做的例子:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致C# 读取Excel到DataTable中
C# 读取Excel到DataTable中
C#基础知识
1. 先描述下碰到的问题,我的excel中有又一列,有数字和文本,任凭我在Excel中设置单元格格式也无济于事。通过&Provider=Microsoft.Jet.OLEDB.4.0;& + &Data Source=& + Path + &;& + &Extended Properties=Excel 8.0;&读取的时候,它会认为那一列为double型,所以文本内容为空,并且在我后面的转换会报异常。而我想把那一列都认为是文本。
为什么呢?
据说,读取excel到DataTable中时,如果Excel中这一列的类型混乱的话,比如说既包括数值型又有字符串型,在运行时创建DataTable的时候,从Excel中前8行进行采样分析,会去先判断Excel中这一列哪种类型的数据占主体,然后给DataTable的列设置为这种类型。比如说,如果一列中既有整数型又有字符型,而整数型单元格占主体,这时DataTable中的列就是整数型。
2. 那么我想把所有的列导入到DataTable时,都为string类型,该怎么弄呢?
经过搜索,使用连接字符串&Provider=Microsoft.Jet.OLEDB.4.0;& + &Data Source=& + Path + &;& + &Extended Properties='Excel 8.0;HDR=NO;IMEX=1';&;解决了我的问题。
HDR( HeaDer Row )设置,有值 yes,no
若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称
若指定值為 No,代表 Excel 档中的工作表第一行就是資料了,沒有栏位名称
IMEX有0,1,2三个值
0 ---输出模式;
1---输入模式;
2----链接模式(完全更新能力) & & & & & & &
当我们设置IMEX=1时将强制混合数据转换为文本,但仅仅这种设置并不可靠,IMEX=1只确保在某列前8行数据至少有一个是文本项的时候才起作用,它只是把查找前8行数据中数据类型占优选择的行为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。另一个改进的措施是IMEX=1与注册表值TypeGuessRows配合使用,TypeGuessRows
值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过修改HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel下的该注册表值来更改采样行数。但是这种改进还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得再大,例如1000,假设数据表有1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM驱动的这种机制还是让这列的数据变成空。
既然不能保证读出来的肯定为文本,那还怎么保证程序的正确呢?
当然,我发现HDR=NO这个设置,一般来讲,一个Excel文件第一行都是标题,而标题一般都是文本格式的。所以,当我们读取的时候,我们可以把第一行当作内容而不是标题来读,HDR=NO;IMEX=1,第一行为字符串类型,所以以后的内容全是字符串类型。最后读到DataTable中后,把table.Row.RemoveAt(0)把第一条记录删除就可以了。使用OLEDB方式读取Excel后,如果HDR=NO,DataTable默认的列名为F1,F2,F3...
这样就可以了,欢迎纠错,谢谢
我的热门文章
即使是一小步也想与你分享16:04 提问
c#操作Excel,我把Excel文件放在当前项目下,怎么写读取路径?
setexcel = new SetExcel(@"E:\001.xls");//我放在E盘中读取文件
我现在把Excel文件放到项目中去,怎么写读取路径?
按赞数排序
你要知道什么是相对路径和绝对路径
asp.net里用server.mapPath()
Application.StartupPath+001.xls
如果当前目录只有一个 Excel 文件,可以考虑先获取当前工作目录,如使用此 API:GetCurrentDirectory;然后再调用:FindFirstFile 获取后缀为 .xls 的文件。
其他相似问题cSharp--excel C#读取 中的数据,进行相关的计算 File Operate 文件操作 269万源代码下载-
&文件名称: cSharp--excel& & [
& & & & &&]
&&所属分类:
&&开发工具: C#
&&文件大小: 1 KB
&&上传时间:
&&下载次数: 9
&&提 供 者:
&详细说明:C#读取excel中的数据,进行相关的计算-C# excel in reading data, the associated calculations
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&[]:和说明完全不符
&近期下载过的用户:
&输入关键字,在本站269万海量源码库中尽情搜索:
&[] - 用于对文件的停用词删除,可以对文件中出现频率过高,没有用的字、词进行剔除
&[] - 2013年所有SCI杂志JCR分区表-全部学科(完美版)-EXCEL格式
&[] - 很好的工具,实现.net对excel操作(导出、导入等等)
&[] - 读取txt文件,并对文件内容按照一定的格式进行处理,讲文件中的弧度转化为角度。
&[] - c#之导入excel,简单明了,源码很简单,一看就会,对学习有很大帮助
&[] - 这是一段C#窗体程序 读取excel表格中的数据
&[] - C# EXCEL完整封装,大型项目中实际应用下载即可使用,功能非常强大,通过它能实现对EXCEL各种读写、格式处理、合并换行、增加图片...功能封装得很完整

我要回帖

更多关于 c 读取excel文件实例 的文章

 

随机推荐