C# 读取excel数据 部分为空值的问题

string StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + Path + "';Extended Properties='Excel 12.0;HDR=NO; IMEX=1'";
OleDbConnection Conn = new OleDbConnection(StrConn);
Conn.Open();
string StrExcel = "";
OleDbDataAdapter MyCommand = null;
DataSet Ds = null;
StrExcel = "select * from [sheet1$]";
MyCommand = new OleDbDataAdapter(StrExcel, StrConn);
Ds = new DataSet();
MyCommand.Fill(Ds, "[sheet1$]");
Conn.Close();

//定义二维数组存储 Excel 表中读取的数据
DataTable ExcelTable = Ds.Tables["[sheet1$]"];
int Colums = RealColumn(Path);//列数
int Rows = RealRow(Path);//行数

string[][] StoryData = new string[Rows][];

// 定义交叉数组
for (int i = 0; i < Rows; i++)
StoryData[i] = new string[Colums];

// 交叉数组赋值
for (int i = 0; i < Rows; i++)
for (int j = 0; j < Colums; j++)
StoryData[i][j] = ExcelTable.Rows[i][j].ToString().Trim();

return StoryData;

有时候数据读取出来是空值,请问怎么解决?

第1个回答  推荐于2016-04-09
你这行代码已经取到值了.下面的代码完全没用.
DataTable ExcelTable = Ds.Tables["[sheet1$]"];
你excel中的内容都在ExcelTable中.

如果取excel中第一行,第二列的值
string str = ExcelTable.Rows[0][1].ToString();

取excel行数
int count = ExcelTable.Rows.Count;

取excel列数
int column = ExcelTable.Column.Count;

判断为空
if ( ExcelTable.Rows[0][1].ToString() == "")本回答被提问者和网友采纳
第2个回答  2014-11-07
excel的行列是从1开始的,所有循环从1开始,再检查下
以上说法不适合你现在情况,如果有空值,可以遍历一遍table然后更改空值情况追问

我读取数据都是正常的,就只有个别几个数据读出来是空值

追答

// 交叉数组赋值
for (int i = 0; i < Rows; i++)
for (int j = 0; j < Colums; j++)
StoryData[i][j] = Convert.IsDBNull(ExcelTable.Rows[i][j]) ? "" :ExcelTable.Rows[i][j].ToString().Trim();

return StoryData;

你这行这么改
用Convert.IsDBNull()函数判断表里是否null值,用==null是无法判断datatable里null的

第3个回答  推荐于2018-05-14
使用控件操作excel文件吧,比如 NPIO等 。要不你这样写的程序必须要求机器上安装有office套件,限制性太大了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网