Excel导入DataTable(一)
2009-07-30 14:54
411 查看
很多时候,我们需要操作Excel中的数据。而要操作Excel中的数据,首先要解决的问题就是把Excel中的数据导入到程序的某个对象中,比如DataTable等。
这里介绍一种常用的Excel导入DataTable的方法。Excel其实也是一种数据库,既然是数据库,就可以用一般的操作数据库的方法来做处理。
/// <summary>
/// 包含表头的连接
/// </summary>
private const string EXCELCONNECTIN = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';";
/// <summary>
/// 不包含表头的连接
/// </summary>
private const string EXCELCONNECTINNOHDR = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO;IMEX=1;';";
/// <summary>
/// 导入Excel数据到DataTable
/// </summary>
/// <param name="strFileName">文件名称</param>
/// <param name="isHead">是否包含表头</param>
/// <param name="iSheet">要导入的sheet</param>
/// <returns>datatable</returns>
public static DataTable GetDataFromExcel(string strFileName, bool isHead,int iSheet)
{
if (!strFileName.ToUpper().EndsWith(".XLS"))
{
return null;
}
DataTable dtReturn = new DataTable();
string strConnection = string.Empty;
if (isHead)
{
strConnection = EXCELCONNECTIN + "Data Source=" + strFileName + ";";
}
else
strConnection = EXCELCONNECTINNOHDR + "Data Source=" + strFileName + ";";
OleDbConnection connection = new OleDbConnection(strConnection);
connection.Open();
try
{
string str = "Select * from [Sheet" + iSheet + "$]";
OleDbDataAdapter adapter = new OleDbDataAdapter(str, connection);
adapter.Fill(dtReturn);
}
catch(Exception ex)
{
dtReturn = null;
}
finally
{
connection.Close();
}
return dtReturn;
}
这种方法导入DataTable有两个不足:
一、在前面介绍了两种导入数据到Excel的方法,对于第二种以写文件的形式写入Excel的时候,曾经说过这种方式导出的Excel在导入的时候会有问题。如果你的Excel是通过写文件的形式导出Excel,再通过该方法导入到DataTable的时候,发现程序会报一个错误提示“外部表不是预期的格式。”。解决这个错误的方法是将该Excel另存为XLS的文件。
二、曾经遇到过Excel的某列前面部分是数字,后面部分是字符。通过这种方法导入的时候发现后面字符部分的数据并没有导入。调试后发现,导入的时候,系统会根据Excel里面的内容为DataTable的列设置类型。前面是数字,这一列就是整型的了,后面的字符当然导不进去了。
将在下面一篇里面介绍另一种导入DataTable的方法。
这里介绍一种常用的Excel导入DataTable的方法。Excel其实也是一种数据库,既然是数据库,就可以用一般的操作数据库的方法来做处理。
/// <summary>
/// 包含表头的连接
/// </summary>
private const string EXCELCONNECTIN = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';";
/// <summary>
/// 不包含表头的连接
/// </summary>
private const string EXCELCONNECTINNOHDR = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO;IMEX=1;';";
/// <summary>
/// 导入Excel数据到DataTable
/// </summary>
/// <param name="strFileName">文件名称</param>
/// <param name="isHead">是否包含表头</param>
/// <param name="iSheet">要导入的sheet</param>
/// <returns>datatable</returns>
public static DataTable GetDataFromExcel(string strFileName, bool isHead,int iSheet)
{
if (!strFileName.ToUpper().EndsWith(".XLS"))
{
return null;
}
DataTable dtReturn = new DataTable();
string strConnection = string.Empty;
if (isHead)
{
strConnection = EXCELCONNECTIN + "Data Source=" + strFileName + ";";
}
else
strConnection = EXCELCONNECTINNOHDR + "Data Source=" + strFileName + ";";
OleDbConnection connection = new OleDbConnection(strConnection);
connection.Open();
try
{
string str = "Select * from [Sheet" + iSheet + "$]";
OleDbDataAdapter adapter = new OleDbDataAdapter(str, connection);
adapter.Fill(dtReturn);
}
catch(Exception ex)
{
dtReturn = null;
}
finally
{
connection.Close();
}
return dtReturn;
}
这种方法导入DataTable有两个不足:
一、在前面介绍了两种导入数据到Excel的方法,对于第二种以写文件的形式写入Excel的时候,曾经说过这种方式导出的Excel在导入的时候会有问题。如果你的Excel是通过写文件的形式导出Excel,再通过该方法导入到DataTable的时候,发现程序会报一个错误提示“外部表不是预期的格式。”。解决这个错误的方法是将该Excel另存为XLS的文件。
二、曾经遇到过Excel的某列前面部分是数字,后面部分是字符。通过这种方法导入的时候发现后面字符部分的数据并没有导入。调试后发现,导入的时候,系统会根据Excel里面的内容为DataTable的列设置类型。前面是数字,这一列就是整型的了,后面的字符当然导不进去了。
将在下面一篇里面介绍另一种导入DataTable的方法。
相关文章推荐
- Excel导入DataTable
- Excel导入到DataTable
- 把DataSet或者DataTable里的数据导入Excel中
- Excel导入DataTable
- 将Excel表格导入DataTable的方法
- 将DataTable 导入Excel并打印
- C#导入Excel到Dataset和导出Excel到DataTable
- 导入Excel到DataTable中的两种实现
- C#将Datatable导入到Excel
- 将Excel表格导入DataTable的方法
- asp.net导入excel转为datatable
- DataSet导入到Excel里,多个DataTable分成多个Sheet,Sheet以TableName命名
- 【一步一步学NPOI】10.导入Excel到DataTable
- 导出Excel 把一个dataset的多个datatable导入到一个excel的多个sheet中
- Excel导入DataTable(一)
- 利用npoi把多个DataTable导入Excel多个sheet中
- 求教。将Excel文件导入DataTable中,然后绑定到GridView中。
- 怎样将Datatable中的数据直接导入到Excel模板上
- 导入EXCEL为DataTable的字符串
- 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中