excel导入时还要保存字体、其背景颜色等信息时读取方法就要改变:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.IO; 6 using System.Data.OleDb; 7 using System.Data; 8 using Microsoft.Office.Interop.Excel; 9 using System.Reflection; 10 using System.Runtime.InteropServices; 11 12 namespace WinOrderAd 13 { 14 public class Excel 15 { 16 public string FilePath 17 { 18 get; 19 set; 20 } 21 public Dictionary<string, string> FiledNames 22 { 23 get; 24 set; 25 } 26 public Excel() 27 { 28 } 29 30 public DataSet ImportExcel()//若只需要知道数据就用此方法 31 { 32 33 try 34 { 35 string strConn; 36 if (Path.GetExtension(FilePath) == ".xlsx") 37 strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 12.0;HDR=YES\""; 38 else 39 strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'"; 40 OleDbConnection OleConn = new OleDbConnection(strConn); 41 OleConn.Open(); 42 System.Data.DataTable table = OleConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); 43 DataSet OleDsExcle = new DataSet(); 44 for (int i = 0; i < table.Rows.Count; i++) 45 { 46 string tableName = table.Rows[i]["Table_Name"].ToString(); 47 tableName = tableName.Replace("'", ""); 48 if (tableName.EndsWith("$")) 49 { 50 string sql = "SELECT * FROM [" + tableName + "]"; 51 OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); 52 OleDaExcel.Fill(OleDsExcle, tableName); 53 OleConn.Close(); 54 } 55 } 56 return OleDsExcle; 57 } 58 catch (Exception err) 59 { 60 throw err; 61 } 62 } 63 64 65 /// <summary> 66 /// 用Excel Com组件方式读取Excel内容到DataSet(兼容性较高) 67 /// </summary> 68 /// <param name="path"></param> 69 /// <returns></returns> 70 public DataSet ToDataTableEx() 71 { 72 Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); 73 74 excel.Visible = false; 75 excel.ScreenUpdating = false; 76 excel.DisplayAlerts = false; 77 78 excel.Workbooks.Add(FilePath); 79 Microsoft.Office.Interop.Excel.Worksheet worksheet = null; 80 Range rangecell = null; 81 DataSet ds = new DataSet(); 82 try 83 { 84 //遍历Worksheets中的每张表 85 for (int i = 1; i <= excel.Worksheets.Count; i++) 86 { 87 //获得指定表 88 worksheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.Worksheets[i]; 89 90 System.Data.DataTable dt = new System.Data.DataTable(); 95 96 //取表明赋值到dt TableName 97 dt.TableName = worksheet.Name; 98 99 worksheet.Columns.EntireColumn.AutoFit(); 100 101 int row = worksheet.UsedRange.Rows.Count; 102 int col = worksheet.UsedRange.Columns.Count; 103 104 for (int c = 1; c <= col; c++) 105 { 106 dt.Columns.Add(new DataColumn((String)((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, c]).Text)); 107 } 108 //添加一样式列 109 dt.Columns.Add(new DataColumn("Style")); 110 111 for (int r = 2; r <= row; r++) 112 { 113 DataRow newRow = dt.NewRow(); 114 for (int c = 1; c <= col; c++) 115 { 116 rangecell = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r, c]; 117 newRow[c - 1] = rangecell.Text; 118 if (c == 3) 119 { 120 //取信息的字体颜色与背景颜色 121 newRow[col] = rangecell.Font.Color + "|" + rangecell.Interior.Color; 122 } 123 } 124 dt.Rows.Add(newRow); 125 } 126 ds.Tables.Add(dt); 127 } 128 } 129 catch (Exception ex) 130 { 131 throw (ex); 132 } 133 finally 134 { 135 if (worksheet != null) 136 { 137 System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); 138 worksheet = null; 139 System.Runtime.InteropServices.Marshal.ReleaseComObject(rangecell); 140 rangecell = null; 141 } 142 excel.Workbooks.Close(); 143 excel.Quit(); 144 int generation = System.GC.GetGeneration(excel); 145 if (excel != null) 146 { 147 System.Runtime.InteropServices.Marshal.ReleaseComObject(excel); 148 excel = null; 149 } 150 System.GC.Collect(generation); 151 } 152 return ds; 153 } 154 341 342 } 343 }
导出设置其样式
1 public void ExportExcel(string[] listTableName, string[] listColName, List<List<Ad>> resource, string exporFilePath) 2 { 3 List<Ad> list = null; 4 List<Ad> listresource = null; 5 Microsoft.Office.Interop.Excel.Application app = 6 new Microsoft.Office.Interop.Excel.ApplicationClass(); 7 8 app.Visible = false; 9 app.ScreenUpdating = false; 10 app.DisplayAlerts = false; 11 Workbook wBook = app.Workbooks.Add(true); 12 13 InsertLinkWorksheet(app, wBook); 14 15 Worksheet wSheet = null; 16 Range rangeResource = null; 17 Range rangeContent = null; 18 Range rangeTitle = null; 19 //for (int k = 0; k < listList.Count; k++) 20 for (int k = listList.Count - 1; k >= 0; k--) 21 {
23 listresource = resource[k];//已排好的数据 24 wSheet = wBook.Sheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value) as Worksheet; 25 wSheet.Name = listTableName[k]; 26 27 try 28 { 29 int resourcenum = listresource.Count; 30 if (resourcenum > 0) 31 { 32 for (int i = 0; i < resourcenum; i++) 33 { 34 wSheet.Cells[i + 2, 1] = (i + 1); 35 wSheet.Cells[i + 2, 2] = listresource[i].ID; 36 wSheet.Cells[i + 2, 3] = listresource[i].Info; 37 wSheet.Cells[i + 2, 4] = listresource[i].Format; 38 wSheet.Cells[i + 2, 5] = listresource[i].Times; 39 wSheet.Cells[i + 2, 6] = listresource[i].Attach; 40 wSheet.Cells[i + 2, 7] = listresource[i].Frequency; 41 wSheet.Cells[i + 2, 8] = listresource[i].Same; 42 wSheet.Cells[i + 2, 9] = listresource[i].Dif; 43 wSheet.Cells[i + 2, 10] = listresource[i].Balanced; 44 45 if (listresource[i].RowStyle.Split('|')[0] != "") 46 { 47 rangeResource = wSheet.get_Range(wSheet.Cells[i + 2, 1], wSheet.Cells[i + 2, 10]); 48 rangeResource.Font.Color = listresource[i].RowStyle.Split('|')[0]; 49 rangeResource.Interior.Color = listresource[i].RowStyle.Split('|')[1]; 50 } 51 } 52 } 53 78 int m = 0; 79 int col = listColName.Count(); 80 for (m = 0; m < col; m++) 81 { 82 string headname = listColName[m];//单元格头部 83 wSheet.Cells[1, 1 + m] = headname; 84 } 85 //内容 86 rangeContent = wSheet.get_Range(wSheet.Cells[2, 1], wSheet.Cells[list.Count + resourcenum + 2 + 1, col]); 87 rangeContent.Borders.Color = System.Drawing.Color.Black.ToArgb(); 88 //rangeContent.Interior.Color = 10092543; //设置区域背景色 89 rangeContent.VerticalAlignment = -4108;//竖向居中 90 rangeContent.HorizontalAlignment = -4108;//横向居中 91 rangeContent.RowHeight = 18; 92 rangeContent.EntireColumn.AutoFit();//自动调整列宽 93 //标题 94 rangeTitle = wSheet.get_Range(wSheet.Cells[1, 1], wSheet.Cells[1, col]); 95 rangeTitle.Borders.Color = System.Drawing.Color.Black.ToArgb(); 96 rangeTitle.Interior.Color = 65280; //设置区域背景色 97 rangeTitle.VerticalAlignment = -4108; 98 rangeTitle.HorizontalAlignment = -4108; 99 rangeTitle.RowHeight = 18; 100 rangeTitle.EntireColumn.AutoFit(); 101 //冻结首行 102 //rangeTitle.Select(); 103 app.ActiveWindow.SplitColumn = 0; 104 app.ActiveWindow.SplitRow = 1; 105 app.ActiveWindow.FreezePanes = true; 106 //rangeTitle.Font.Bold = true; //设置字体粗体。 107 } 108 catch (Exception err) 109 { 110 throw err; 111 } 112 finally 113 { 114 115 } 116 } 117 //设置禁止弹出保存和覆盖的询问提示框 118 app.DisplayAlerts = false; 119 app.AlertBeforeOverwriting = false; 120 ((Worksheet)wBook.Worksheets["Sheet1"]).Delete(); 121 try 122 { 123 wBook.Saved = true; 124 //保存工作簿 125 System.Reflection.Missing miss = System.Reflection.Missing.Value; 126 wBook.SaveAs(exporFilePath, miss, miss, miss, miss, miss, XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss); 127 } 128 catch (Exception ex) 129 { 130 throw ex; 131 } 132 133 if (rangeResource != null) 134 { 135 System.Runtime.InteropServices.Marshal.ReleaseComObject(rangeResource); 136 System.Runtime.InteropServices.Marshal.ReleaseComObject(rangeContent); 137 System.Runtime.InteropServices.Marshal.ReleaseComObject(rangeTitle); 138 rangeResource = null; 139 rangeContent = null; 140 rangeTitle = null; 141 } 142 143 if (wSheet != null) 144 { 145 System.Runtime.InteropServices.Marshal.ReleaseComObject(wSheet); 146 wSheet = null; 147 } 148 149 if (wBook != null) 150 { 151 System.Runtime.InteropServices.Marshal.ReleaseComObject(wBook); 152 wBook = null; 153 } 154 app.Workbooks.Close(); 155 app.Quit(); 156 int generation = System.GC.GetGeneration(app); 157 if (app != null) 158 { 159 System.Runtime.InteropServices.Marshal.ReleaseComObject(app); 160 app = null; 161 } 162 GC.Collect(generation); 163 }
listTableName为多个sheet的名称
listColName为每页的列名
resource为sheet数据队列
exporFilePath为要保存的路径
本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/archive/2013/05/28/3103046.html如需转载请自行联系原作者
欢醉