• Excel导入导出数据库02


    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为要保存的路径

    作者:欢醉
    公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
    出处:http://zhangs1986.cnblogs.com/
    码云:https://gitee.com/huanzui
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    Top
  • 相关阅读:
    js判断时间间隔
    redis 常用命令
    Spring 启动 自动调用方法的两种形式
    多线程的异常处理
    多线程Monitor.TryEnter(有一个聪明的员工找老板。看到老板们在里面都掐成一团乱麻了,算了我还是撩吧)
    多线程中多个join的执行过程
    多线程之向线程传递参数
    ASP.Net Core下的安全(授权、身份验证、ASP.NET Core Identity)
    C# 中常用的索引器(转)
    《戏班的故事》C#基础之多线程之“前台线程-后台线程”
  • 原文地址:https://www.cnblogs.com/zhangs1986/p/3103046.html
Copyright © 2020-2023  润新知