C#将table保存Excel 的方法和读取Excel 返回dataset 的方法
-导出Excel
/// <summary> /// 导出Excel /// </summary> /// <param name="FileName">文件名</param> /// <param name="DataSource">要导出的table</param> /// <param name="jkname">名称</param> /// <returns></returns> public bool CreateExcel(string FileName, System.Data.DataTable DataSource,string jkname) { bool flag = false; try { XlsDocument xls = new XlsDocument(); org.in2bits.MyXls.Worksheet sheet1 = xls.Workbook.Worksheets.Add(jkname); XF xf = xls.NewXF(); //xf.Font.Bold = true; xf.HorizontalAlignment = HorizontalAlignments.Centered; xf.Font.Height = 16 * 16; ColumnInfo columnInfo = new ColumnInfo(xls, sheet1); columnInfo.ColumnIndexStart = 0; columnInfo.ColumnIndexEnd = (ushort)(DataSource.Columns.Count - 2); columnInfo.Width = 15 * 300; sheet1.AddColumnInfo(columnInfo); Cells cells1 = sheet1.Cells; //合并单元格cells.Merge(1, 1, 1, 7); for (int j = 0; j < DataSource.Columns.Count; j++) { cells1.Add(1, j + 1, DataSource.Columns[j].ColumnName, xf); } for (int l = 0; l < DataSource.Rows.Count; l++) { for (int j = 0; j < DataSource.Columns.Count; j++) cells1.Add(l + 2, j + 1, DataSource.Rows[l][j].ToString()); } int fileI = FileName.LastIndexOf("\\"); xls.FileName = FileName.Substring(fileI + 1, FileName.Length - (fileI + 1)); string path = FileName.Substring(0, fileI + 1); ; xls.Save(path, true); flag = true; } catch (Exception ex) { flag = false; MessageBox.Show(ex.Message); } return flag; }
二 读取Excel 的方法
/// <summary> /// 读取Excel文件里面的内容到DataSet /// </summary> /// <param name="Path">路径</param> /// <param name="ds">接收的ds</param> public void ExcelToDS(string Path,ref DataSet ds) { string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } string strExcel = ""; OleDbDataAdapter myCommand = null; strExcel = "select top 10 * from [" + strTableNames[0] + "] ";//strTableNames[0]取得第一个Sheet中的数据 myCommand = new OleDbDataAdapter(strExcel, strConn); ds = new DataSet(); myCommand.Fill(ds); conn.Close(); conn.Dispose(); }