c# 32位机和64位机 读取Excel内容到DataSet
2011-12-09 10:50
274 查看
----------------------32位机
//注释说明
//ExclePath 为Excel路径 批号 是指Excel文件中某一列必填项
public static DataSet GetDataTableForExcel(String ExclePath)
{
string strCon = String.Empty;
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExclePath + "; Extended Properties='Excel 8.0;IMEX=1';";
OleDbConnection olecon = new OleDbConnection(strCon);
olecon.Open();
DataTable dt = olecon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string tableName = dt.Rows[0][2].ToString().Trim();
OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [" + tableName + "] Where 批号 is not null", strCon);// Where 条件根据实际情况进行更改
DataSet myds = new DataSet();
try
{
myda.Fill(myds);
}
catch { myds = null;}
olecon.Close();
return myds;
}
-----------------------------64位机
/// <summary>
/// 把Excel里的数据转换为DataTable,应用引用的com组件:Microsoft.Office.Interop.Excel.dll 读取EXCEL文件
/// </summary>
/// <param name="filenameurl">物理路径</param>
/// <param name="sheetIndex">sheet名称的索引</param>
/// <param name="splitstr">如果是已存在列,则自定义添加的字符串</param>
/// <returns></returns>
public static DataTable ExecleToDataSet(string filenameurl, int sheetIndex, string splitstr)
{
//
Microsoft.Office.Interop.Excel.Workbook wb = null;
Microsoft.Office.Interop.Excel.Worksheet ws =null;
bool isEqual = false;//不相等
ArrayList columnArr = new ArrayList();//列字段表
DataSet myDs = new DataSet();
DataTable xlsTable = myDs.Tables.Add("show");
object missing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//lauch excel application
if (excel != null)
{
excel.Visible = false;
excel.UserControl = true;
// 以只读的形式打开EXCEL文件
wb = excel.Workbooks.Open(filenameurl, missing, true, missing, missing, missing,
missing, missing, missing, true, missing, missing, missing, missing, missing);
//取得第一个工作薄
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(sheetIndex);
//取得总记录行数(包括标题列)
int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数
int columnsint = ws.UsedRange.Cells.Columns.Count;//得到列数
DataRow dr;
for (int i = 1; i <= columnsint; i++)
{
//判断是否有列相同
if (i >= 2)
{
int r = 0;
for (int k = 1; k <= i - 1; k++)//列从第一列到第i-1列遍历进行比较
{
if (((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString() == ((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, k]).Text.ToString())
{
//如果该列的值等于前面列中某一列的值
xlsTable.Columns.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString() + splitstr + (r + 1).ToString(), typeof(string));
columnArr.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString() + splitstr + (r + 1).ToString());
isEqual = true;
r++;
break;
}
else
{
isEqual = false;
continue;
}
}
if (!isEqual)
{
xlsTable.Columns.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString(), typeof(string));
columnArr.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString());
}
}
else
{
xlsTable.Columns.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString(), typeof(string));
columnArr.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString());
}
}
for (int i = 2; i <= rowsint; i++)
{
dr = xlsTable.NewRow();
for (int j = 1; j <= columnsint; j++)
{
dr[columnArr[j - 1].ToString()] = ((Microsoft.Office.Interop.Excel.Range)ws.Cells[i, j]).Text.ToString();
}
xlsTable.Rows.Add(dr);
}
}
excel.Quit();
excel = null;
Dispose(ws,wb);
return xlsTable;
}
//注释说明
//ExclePath 为Excel路径 批号 是指Excel文件中某一列必填项
public static DataSet GetDataTableForExcel(String ExclePath)
{
string strCon = String.Empty;
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExclePath + "; Extended Properties='Excel 8.0;IMEX=1';";
OleDbConnection olecon = new OleDbConnection(strCon);
olecon.Open();
DataTable dt = olecon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string tableName = dt.Rows[0][2].ToString().Trim();
OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [" + tableName + "] Where 批号 is not null", strCon);// Where 条件根据实际情况进行更改
DataSet myds = new DataSet();
try
{
myda.Fill(myds);
}
catch { myds = null;}
olecon.Close();
return myds;
}
-----------------------------64位机
/// <summary>
/// 把Excel里的数据转换为DataTable,应用引用的com组件:Microsoft.Office.Interop.Excel.dll 读取EXCEL文件
/// </summary>
/// <param name="filenameurl">物理路径</param>
/// <param name="sheetIndex">sheet名称的索引</param>
/// <param name="splitstr">如果是已存在列,则自定义添加的字符串</param>
/// <returns></returns>
public static DataTable ExecleToDataSet(string filenameurl, int sheetIndex, string splitstr)
{
//
Microsoft.Office.Interop.Excel.Workbook wb = null;
Microsoft.Office.Interop.Excel.Worksheet ws =null;
bool isEqual = false;//不相等
ArrayList columnArr = new ArrayList();//列字段表
DataSet myDs = new DataSet();
DataTable xlsTable = myDs.Tables.Add("show");
object missing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//lauch excel application
if (excel != null)
{
excel.Visible = false;
excel.UserControl = true;
// 以只读的形式打开EXCEL文件
wb = excel.Workbooks.Open(filenameurl, missing, true, missing, missing, missing,
missing, missing, missing, true, missing, missing, missing, missing, missing);
//取得第一个工作薄
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(sheetIndex);
//取得总记录行数(包括标题列)
int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数
int columnsint = ws.UsedRange.Cells.Columns.Count;//得到列数
DataRow dr;
for (int i = 1; i <= columnsint; i++)
{
//判断是否有列相同
if (i >= 2)
{
int r = 0;
for (int k = 1; k <= i - 1; k++)//列从第一列到第i-1列遍历进行比较
{
if (((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString() == ((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, k]).Text.ToString())
{
//如果该列的值等于前面列中某一列的值
xlsTable.Columns.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString() + splitstr + (r + 1).ToString(), typeof(string));
columnArr.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString() + splitstr + (r + 1).ToString());
isEqual = true;
r++;
break;
}
else
{
isEqual = false;
continue;
}
}
if (!isEqual)
{
xlsTable.Columns.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString(), typeof(string));
columnArr.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString());
}
}
else
{
xlsTable.Columns.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString(), typeof(string));
columnArr.Add(((Microsoft.Office.Interop.Excel.Range)ws.Cells[1, i]).Text.ToString());
}
}
for (int i = 2; i <= rowsint; i++)
{
dr = xlsTable.NewRow();
for (int j = 1; j <= columnsint; j++)
{
dr[columnArr[j - 1].ToString()] = ((Microsoft.Office.Interop.Excel.Range)ws.Cells[i, j]).Text.ToString();
}
xlsTable.Rows.Add(dr);
}
}
excel.Quit();
excel = null;
Dispose(ws,wb);
return xlsTable;
}
相关文章推荐
- c# 32位机和64位机 读取Excel内容到DataSet
- C#读取excel文件的内容(使用DataSet)
- C# 读取Excel文件里面的内容到DataSet
- C#读取Excel数据,文件中某些数据读取到DataSet中却为空
- C#读取excel内容
- 读取Excel文件内容到DataSet
- ASP.NET(C#)读取Excel的文件内容
- C#读取Excel的指定页面的内容,并返回成一个DataTable
- C#中读取EXCEL内容
- 读取Excel文件,将内容存储在DataSet中
- C#读取EXCEL内容到类时遇到的问题
- C#读取excel数据时,文本格式和数值格式的内容无法正常全部读取
- c# 读取excel文件第1个表的内容
- ASP.NET(C#)读取Excel的文件内容
- C#下使用第三方开源控件读取Excel文件的内容
- 用c#打开.DBF文件 读取内容到DataTable或DataSet中
- 用C#读取Excel返回DataSet
- c#.net不能完全读取Excel内容的问题
- C#从Excel文件中读取数据转换为DataSet
- 把excel文档中的内容读取到dataset中