C# 读取excel数据 部分为空值的问题
stringStrConn="Provider=Microsoft.ACE.OLEDB.12.0;DataSource='"+Path+"';ExtendedProper...
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;
有时候数据读取出来是空值,请问怎么解决? 展开
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;
有时候数据读取出来是空值,请问怎么解决? 展开
3个回答
展开全部
你这行代码已经取到值了.下面的代码完全没用.
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() == "")
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() == "")
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
excel的行列是从1开始的,所有循环从1开始,再检查下
以上说法不适合你现在情况,如果有空值,可以遍历一遍table然后更改空值情况
以上说法不适合你现在情况,如果有空值,可以遍历一遍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的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用控件操作excel文件吧,比如 NPIO等 。要不你这样写的程序必须要求机器上安装有office套件,限制性太大了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |