C# 读取Excel中的数据
#region 读取Excel中的数据
/// <summary>
/// 读取Excel中的数据
/// </summary>
/// <param name="excelFile">Excel文件名称及路径,EG:C:\Users\JK\Desktop\导入測试.xls</param>
/// <returns>Excel中的数据</returns>
private DataTable GetTable(string fileName)
{
OleDbConnection objConn = null;
System.Data.DataTable dt = null;
string connString = string.Empty;
OleDbDataAdapter da = new OleDbDataAdapter();
//获取Excel工作薄中Sheet页(工作表)名集合
String[] ss = this.GetExcelSheetNames(fileName);
DataTable dataTable = new DataTable();
try
{
string FileType = fileName.Substring(fileName.LastIndexOf("."));
if (FileType == ".xls")
connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
else//.xlsx
connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
// 创建连接对象
objConn = new OleDbConnection(connString);
// 打开数据库连接
objConn.Open(); string sql_F = "Select * FROM [{0}]";
for (int i = 0; i < ss.Length;i++ )
{
da.SelectCommand = new OleDbCommand(String.Format(sql_F, ss[i].ToString() + "$"), objConn);
da.Fill(dataTable);
MessageBox.Show("第"+i+"次表中数据量="+dataTable.Rows.Count.ToString());
}
dataTable = DeleteBlank(dataTable,9);
MessageBox.Show("删除空行后,表中数据量=" + dataTable.Rows.Count.ToString());
return dataTable;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
finally
{
// 清理
if (objConn != null)
{
objConn.Close();
objConn.Dispose();
}
if (dt != null)
{
dt.Dispose();
}
}
} #endregion
#region 删除指定表中的空白行
/// <summary>
///删除指定表中的空白行
/// </summary>
/// <param name="dt">表名</param>
/// <param name="ColNum">Excel中的列数</param>
/// <returns>删除空白行后的DataTable</returns>
private DataTable DeleteBlank(DataTable dt,int ColNum)
{
if (dt == null || dt.Rows.Count==0)
{
return dt;
}
//删除当中的空行(注意for循环的形式)
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
DataRow row = dt.Rows[i];
bool flag = true;
//当某行的ColNum列,均为空时,改行为空
for (int j = 0; j < ColNum; j++)
{
object o = row[j];
if (o != DBNull.Value && Convert.ToString(o).Trim().Length > 0)
{
flag = false;
break;
}
}
if (flag)
{
dt.Rows[i].Delete();
}
}
dt.AcceptChanges();
//把行中DBNull列替换成空字符串
for (int k = dt.Rows.Count - 1; k >= 0; k--)
{
DataRow row = dt.Rows[k];
for (int z = 0; z < ColNum; z++)
{
object o = row[z];
if (o == DBNull.Value)
{
if (dt.Columns[z].DataType == typeof(string))
{
row[z] = "";
}
}
}
}
dt.AcceptChanges();
return dt;
}
#endregion
小注:
读取Excel的时候。会自己主动处理表头。
C# 读取Excel中的数据的更多相关文章
- sql 读取excel中的数据
select 列名 as 字段名 from openBowSet('MSDASQL.1','driver=Microsoft Excel Driver(*.xls);dbq=文件存放地址','sele ...
- SpringBoot(十三)_springboot上传Excel并读取excel中的数据
今天工作中,发现同事在整理数据,通过excel上传到数据库.所以现在写了篇利用springboot读取excel中的数据的demo.至于数据的进一步处理,大家肯定有不同的应用场景,自行修改 pom文件 ...
- 无法读取Excel中的数据单元格。有数据,但是读出来全是空值
C#读取Excel,取值为空的解决办法! C#读取Excel遇到无法读取的解决方法是什么呢?这样在C#读取Excel的过程中有很多问题,那么本文就向你介绍如何解决C#读取Excel遇到无法读取的解决方 ...
- 读取Excel中的数据到DataSet
读取Excel中的数据到DataSet 1.引用命名空间 using System.Data.OleDb; 2.输入Excel文件,输出DataSet public DataSet ExecleDs( ...
- java中使用jxl读取excel中的数据
package bboss; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impo ...
- asp.net读取Excel中的数据问题
1.Microsoft.ACE.OLEDB.12.0 与Microsoft.Jet.OLEDB.4.0 在通过ADO对Excel对象进行连接时(此时Excel则认为是一个数据源),需要配置对Exc ...
- C# 读取Excel中的数据到DataTable中
原文地址:http://www.open-open.com/code/view/1420029490093 public DataTable ExcelToDS(string Path) { stri ...
- JAVA导入(读取)Excel中的数据(支持xls与xlsx文件)
一.导入jar包 poi-3.7.jarpoi-scratchpad-3.7.jarpoi-examples-3.7.jarpoi-ooxml-3.7.jarpoi-ooxml-schemas-3.7 ...
- Python读取Excel中的数据并导入到MySQL
""" 功能:将Excel数据导入到MySQL数据库 """ import xlrd import MySQLdb # Open the w ...
随机推荐
- css盒模型与bfc与布局与垂直水平居中与css设计模式等
一.css盒子与布局相关 盒子内部的布局 盒子之间的布局visual formatting 脱离正常流normal flow的盒子的布局 absolute布局上下文下的布局 float布局上下文下的布 ...
- eclipse快捷键补全
Eclipse中 补全快捷键 默认Alt+/ 但是每个人习惯有所不同 我需要来修改自己熟悉的快捷键 windows->preferences->General->keys将Conte ...
- vNS12 MySQL Performance
vNS12 MySQL Performance vNS12(192.168.195.91): 2vCPU + 2GBMemMySQL1(192.168.185.73): 2vCPU + 1GBMemM ...
- 编程风格——代码中特殊的注释技术——TODO、FIXME和XXX的用处
代码中特殊的注释技术——TODO.FIXME和XXX的用处 前言:今天在阅读Qt Creator的源代码时,发现一些注释中有FIXME英文单词,用英文词典居然查不到其意义!实际上,在阅读一些开源代码时 ...
- HDU3001 Travelling
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- javascript屏蔽脏字
原文发布时间为:2009-04-16 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- .net连接mysql
首先在官网下载,mysql-connect-net,用于使用mysql的驱动程序,我在下载mysql-connect-net.msi. installer后,执行安装程序的时候一直无法安装成功,最简单 ...
- 基于Xen实现一种domain0和domainU的应用层数据交互高效机制 - 2
继续昨天的思路,今天先google了类似的实现domain0和domainU之间数据传输的方案 [Xen-devel] XenStore as a data transfer path? 这篇帖子讨 ...
- C#图解教程学习笔记——数据类型与数据存储
一.数据类型1. 预定义类型C#提供16种预定义类型,包括13种简单类型和3种非简单类型:(1)简单类型<1>11种数值类型: 不同长度的有符号和无符号整数类型 浮点数的float和dou ...
- bzoj 5056: OI游戏
5056: OI游戏 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 204 Solved: 162[Submit][Status][Discuss] D ...