将Excel文件读入到DataSet

有的时候我们需要把一个Excel格式的文档读取到DataSet中。下面写的是一个读取Excel方法,可以控制我们从Excel文件的第几行读取,以及我们需要每行读取的列数。代码中allFields += dsExcel.Tables[0].Rows[i][j].ToString().Trim() + "+|+";是为了防止Excel中有的单元格为空,现加"+|+"然后再按"+|+"分割可以保证Excel中的列和DataSet中表的列一一对应。

///<summary>
/// 将Excel文件读入DataSet
///</summary>
///<param name="fileFullPath">Excel文件全路径</param>
///<param name="startLine">从第几行开始是订单内容,第一行为0</param>
///<param name="columnCount">需要取得的列数</param>
///<returns></returns>
public DataSet ReadExcelFileToDataSet(string fileFullPath, int startLine, int columnCount)
{
if (StandardFunction.CommonFunction.bgwExecute != null)
{
StandardFunction.CommonFunction.bgwExecute.ReportProgress(1, "开始读取文件");
}
string ExcelTableName = "";
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileFullPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";

OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
OleDbDataAdapter myCommand;
       //获取文件中TABLE类型的表
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
DataSet dsExcel = new DataSet();
try
{
DataRow dr = schemaTable.Rows[0];
ExcelTableName = dr["TABLE_NAME"].ToString().Trim();
          //从对应Excel内容的表中获取数据
string strExcel = "select * from [" + ExcelTableName + "]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(dsExcel);
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
if (dsExcel.Tables[0].Rows.Count>startLine)
{
DataSet ds = new DataSet();
ds.Tables.Add("FileTable");
for (int i = 0; i < columnCount; i++)
{
ds.Tables["FileTable"].Columns.Add("Column_" + i.ToString(), Type.GetType("System.String"));
}
string allFields;
for (int i = startLine; i < dsExcel.Tables[0].Rows.Count; i++)
{
allFields = "";
for (int j = 0; j < columnCount; j++)
{
if (j >= dsExcel.Tables[0].Columns.Count)
{
allFields += "+|+";
}
else
{
allFields += dsExcel.Tables[0].Rows[i][j].ToString().Trim() + "+|+";
}
}
allFields = allFields.Substring(0, allFields.Length - 3);
if (allFields.Replace("+|+", "").Trim().Length > 0)
{
ds.Tables["FileTable"].Rows.Add(allFields.Split(new string[] { "+|+" }, StringSplitOptions.None));
}
}
if (StandardFunction.CommonFunction.bgwExecute != null)
{
StandardFunction.CommonFunction.bgwExecute.ReportProgress(1, "读取文件结束");
}
return ds;
}
else
{
throw new Exception("这个Excel文件中没有内容!");
}
}

 

posted @ 2011-11-18 11:56  joeleo  阅读(624)  评论(0编辑  收藏  举报