• C#操作Excel


    Excel操作类使用方法

     1         protected void Button1_Click(object sender, EventArgs e)
     2         {
     3             OperateExcel excel = new OperateExcel();
     4             //打开Excel
     5             excel.Open("d:\abc.xlsx");
     6             //获取工作表
     7             var  weet = excel.GetSheet("Sheet2");
     8             //写入Excel
     9             excel.SetCellValue(weet, 1, 2, "1011");
    10             ////另存为Excel
    11             //excel.SaveAs("d:\bcd.xlsx");
    12             ////注销Excel进程
    13             //excel.Close();
    14             excel.SaveAsHtml(HttpContext.Current.Server.MapPath("aa.html"));
    15 
    16             //杀掉Excel进程
    17             excel.KillSpecialExcel();
    18         }

    Excel操作类

    需引用:

      1 using System;
      2 using System.Data;
      3 using System.Configuration;
      4 using System.Web;
      5 using System.Web.Security;
      6 using System.Web.UI;
      7 using System.Web.UI.WebControls;
      8 using System.Web.UI.WebControls.WebParts;
      9 using System.Web.UI.HtmlControls;
     10 using Microsoft.Office.Core;
     11 using System.Runtime.InteropServices;
     12 using System.IO;
     13 
     14 ///   <summary >       
     15 ///   Excel操作类       
     16 ///   </summary >       
     17 public class OperateExcel
     18 {
     19     public string mFilename;
     20     public Microsoft.Office.Interop.Excel.Application app;
     21     public Microsoft.Office.Interop.Excel.Workbooks wbs;
     22     public Microsoft.Office.Interop.Excel.Workbook wb;
     23     public Microsoft.Office.Interop.Excel.Worksheets wss;
     24     public Microsoft.Office.Interop.Excel.Worksheet ws;
     25     public OperateExcel()
     26     {
     27         //       
     28         //   TODO:   在此处添加构造函数逻辑       
     29         //       
     30     }
     31 
     32     /// <summary>
     33     /// 创建一个Excel对象
     34     /// </summary>
     35     public void Create()
     36     {
     37         app = new Microsoft.Office.Interop.Excel.Application();
     38         wbs = app.Workbooks;
     39         wb = wbs.Add(true);
     40     }
     41 
     42     /// <summary>
     43     /// 打开一个Excel文件
     44     /// </summary>
     45     /// <param name="FileName">Excel文件路径及名称</param>
     46     public void Open(string FileName)
     47     {
     48         object missing = System.Reflection.Missing.Value;
     49         app = new Microsoft.Office.Interop.Excel.Application();
     50         app.Visible = true;
     51         wbs = app.Workbooks;
     52         wb = wbs.Open(FileName, missing, false, missing, missing, missing,missing, missing, missing, true, missing, missing, missing, missing, missing);
     53         //wb = wbs.Add(FileName);
     54         mFilename = FileName;
     55     }
     56 
     57     /// <summary>
     58     /// 复制并打开模板文件
     59     /// </summary>
     60     /// <param name="Path">模板文件位置及文件名</param>
     61     /// <param name="sufix">复制后文件所加后缀</param>
     62     /// <param name="IsVisible">是否可见</param>
     63     /// <returns>复制后文件位置</returns>
     64     public string CopyAndOpenTemplate(string excelName)
     65     {
     66         try
     67         {
     68             string templetFilePath = HttpContext.Current.Server.MapPath("~\XlsTemplate\SampleZhongshuExcelTemplate.xlsx");
     69             string currentFolder = HttpContext.Current.Server.MapPath("~\UploadFile\")+DateTime.Now.ToString("yyyy-MM-dd");
     70             string toPath = currentFolder + "\" + excelName;
     71             //string tempFolderName = DateTime.Now.ToString("yyyy-MM-dd").Replace("-", "").Replace("/", "").Replace("\", "");
     72             //string targetFolder = HttpContext.Current.Server.MapPath("~\UploadFile\" + tempFolderName);
     73             //如果不存在则创建
     74             if (!Directory.Exists(currentFolder))
     75             {
     76                 Directory.CreateDirectory(currentFolder);
     77             }
     78 
     79             File.Copy(templetFilePath, toPath, true);
     80 
     81             //File.SetAttributes(toPath, FileAttributes.Normal);
     82             Open(toPath);
     83             return toPath;
     84         }
     85         catch (Exception e)
     86         {
     87             //
     88             KillSpecialExcel();
     89             throw e;
     90 
     91         }
     92     }
     93 
     94     /// <summary>
     95     /// 获取一个工作表
     96     /// </summary>
     97     /// <param name="SheetName">工作表名称</param>
     98     /// <returns>Excel工作表</returns>
     99     public Microsoft.Office.Interop.Excel.Worksheet GetSheet(string SheetName)
    100     {
    101         Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[SheetName];
    102         return s;
    103     }
    104 
    105     /// <summary>
    106     /// 添加一个工作表
    107     /// </summary>
    108     /// <param name="SheetName">工作表名称</param>
    109     /// <returns>Excel工作表</returns>
    110     public Microsoft.Office.Interop.Excel.Worksheet AddSheet(string SheetName)
    111     {
    112         Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    113         s.Name = SheetName;
    114         return s;
    115     }
    116 
    117     /// <summary>
    118     /// 删除一个工作表
    119     /// </summary>
    120     /// <param name="SheetName">工作表名称</param>
    121     public void DelSheet(string SheetName)
    122     {
    123         ((Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[SheetName]).Delete();
    124     }
    125 
    126     /// <summary>
    127     /// 重命名一个工作表
    128     /// </summary>
    129     /// <param name="OldSheetName">要改名的工作表</param>
    130     /// <param name="NewSheetName">工作表新名称</param>
    131     /// <returns>工作表</returns>
    132     public Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(string OldSheetName, string NewSheetName)
    133     {
    134         Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[OldSheetName];
    135         s.Name = NewSheetName;
    136         return s;
    137     }
    138 
    139     /// <summary>
    140     /// 重命名一个工作表
    141     /// </summary>
    142     /// <param name="Sheet">Excel工作表实例</param>
    143     /// <param name="NewSheetName">新命名的工作表</param>
    144     /// <returns>Excel工作表</returns>
    145     public Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(Microsoft.Office.Interop.Excel.Worksheet Sheet, string NewSheetName)
    146     {
    147         Sheet.Name = NewSheetName;
    148         return Sheet;
    149     }
    150 
    151     /// <summary>
    152     /// 设置工作表的值1
    153     /// </summary>
    154     /// <param name="ws">要设值的工作表</param>
    155     /// <param name="x"></param>
    156     /// <param name="y"></param>
    157     /// <param name="value">要设置的值</param>
    158     public void SetCellValue(Microsoft.Office.Interop.Excel.Worksheet ws, int x, int y, object value)
    159     {
    160         ws.Cells[x, y] = value;
    161     }
    162 
    163     /// <summary>
    164     /// 设置工作表的值2
    165     /// </summary>
    166     /// <param name="ws">工作表的名称</param>
    167     /// <param name="x"></param>
    168     /// <param name="y"></param>
    169     /// <param name="value">要设置的值</param>
    170     public void SetCellValue(string ws, int x, int y, object value)
    171     {
    172         GetSheet(ws).Cells[x, y] = value;
    173     }
    174 
    175     /// <summary>
    176     /// 设置工作表属性
    177     /// </summary>
    178     /// <param name="ws">工作表</param>
    179     /// <param name="Startx">开始的行</param>
    180     /// <param name="Starty">开始的列</param>
    181     /// <param name="Endx">结束的行</param>
    182     /// <param name="Endy">结束的列</param>
    183     /// <param name="size">大小</param>
    184     /// <param name="name">字体名称</param>
    185     /// <param name="color">颜色</param>
    186     /// <param name="HorizontalAlignment">对齐方式</param>
    187     public void SetCellProperty(Microsoft.Office.Interop.Excel.Worksheet ws, int Startx, int Starty, int Endx, int Endy, int size, string name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)
    188     {
    189         //name = "宋体 ";
    190         //size = 12;
    191         //color = Microsoft.Office.Interop.Excel.Constants.xlAutomatic;
    192         //HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlRight;
    193         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;
    194         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;
    195         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;
    196         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;
    197     }
    198 
    199     /// <summary>
    200     /// 设置工作表的值
    201     /// </summary>
    202     /// <param name="ws">工作表的名称</param>
    203     /// <param name="Startx">开始的行</param>
    204     /// <param name="Starty">开始的列</param>
    205     /// <param name="Endx">结束的行</param>
    206     /// <param name="Endy">结束的列</param>
    207     /// <param name="size">大小</param>
    208     /// <param name="name">字体名称</param>
    209     /// <param name="color">颜色</param>
    210     /// <param name="HorizontalAlignment">对齐方式</param>
    211     public void SetCellProperty(string wsn, int Startx, int Starty, int Endx, int Endy, int size, string name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)
    212     {
    213         //name   =   "宋体 ";       
    214         //size   =   12;       
    215         //color   =   Microsoft.Office.Interop.Excel.Constants.xlAutomatic;       
    216         //HorizontalAlignment   =   Microsoft.Office.Interop.Excel.Constants.xlRight;       
    217         Microsoft.Office.Interop.Excel.Worksheet ws = GetSheet(wsn);
    218         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;
    219         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;
    220         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;
    221         ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;
    222     }
    223 
    224 
    225 
    226 
    227     /// <summary>
    228     /// 合并单元格
    229     /// </summary>
    230     /// <param name="ws">工作表</param>
    231     /// <param name="x1">开始的行</param>
    232     /// <param name="y1">开始的列</param>
    233     /// <param name="x2">结束的行</param>
    234     /// <param name="y2">结束的列</param>
    235     public void UniteCells(Microsoft.Office.Interop.Excel.Worksheet ws, int x1, int y1, int x2, int y2)
    236     {
    237         ws.get_Range(ws.Cells[x1, y1], ws.Cells[x2, y2]).Merge(Type.Missing);
    238     }
    239 
    240     /// <summary>
    241     /// 合并单元格
    242     /// </summary>
    243     /// <param name="ws">工作表名称</param>
    244     /// <param name="x1">开始的行</param>
    245     /// <param name="y1">开始的列</param>
    246     /// <param name="x2">结束的行</param>
    247     /// <param name="y2">结束的列</param>
    248     public void UniteCells(string ws, int x1, int y1, int x2, int y2)
    249     {
    250         GetSheet(ws).get_Range(GetSheet(ws).Cells[x1, y1], GetSheet(ws).Cells[x2, y2]).Merge(Type.Missing);
    251     }
    252 
    253     /// <summary>
    254     /// 将表格插入到Excel的指定工作表指定位置
    255     /// </summary>
    256     /// <param name="dt">DataTable</param>
    257     /// <param name="ws">工作表名称</param>
    258     /// <param name="startX">开始行</param>
    259     /// <param name="startY">开始列</param>
    260     public void InsertTable(System.Data.DataTable dt, string ws, int startX, int startY)
    261     {
    262         for (int i = 0; i <= dt.Rows.Count - 1; i++)
    263         {
    264             for (int j = 0; j <= dt.Columns.Count - 1; j++)
    265             {
    266                 GetSheet(ws).Cells[startX + i, j + startY] = dt.Rows[i][j].ToString();
    267             }
    268         }
    269     }
    270 
    271 
    272 
    273     /// <summary>
    274     /// DataTable表格添加到Excel指定工作表的指定位置
    275     /// </summary>
    276     /// <param name="dt">DataTable</param>
    277     /// <param name="ws">工作表名称</param>
    278     /// <param name="startX">开始行</param>
    279     /// <param name="startY">开始列</param>
    280     public void AddTable(System.Data.DataTable dt, string ws, int startX, int startY)
    281     {
    282         for (int i = 0; i <= dt.Rows.Count - 1; i++)
    283         {
    284             for (int j = 0; j <= dt.Columns.Count - 1; j++)
    285             {
    286                 GetSheet(ws).Cells[i + startX, j + startY] = dt.Rows[i][j];
    287             }
    288         }
    289     }
    290 
    291     /// <summary>
    292     /// DataTable表格添加到Excel指定工作表的指定位置
    293     /// </summary>
    294     /// <param name="dt">DataTable</param>
    295     /// <param name="ws">工作表</param>
    296     /// <param name="startX">开始行</param>
    297     /// <param name="startY">开始列</param>
    298     public void AddTable(System.Data.DataTable dt, Microsoft.Office.Interop.Excel.Worksheet ws, int startX, int startY)
    299     {
    300         for (int i = 0; i <= dt.Rows.Count - 1; i++)
    301         {
    302             for (int j = 0; j <= dt.Columns.Count - 1; j++)
    303             {
    304                 ws.Cells[i + startX, j + startY] = dt.Rows[i][j];
    305             }
    306         }
    307     }
    308 
    309     /// <summary>
    310     /// 将图片插入到工作表中
    311     /// </summary>
    312     /// <param name="Filename">图片</param>
    313     /// <param name="ws">工作表</param>
    314     public void InsertPictures(string Filename, string ws)
    315     {
    316         GetSheet(ws).Shapes.AddPicture(Filename, MsoTriState.msoFalse, MsoTriState.msoTrue, 10, 10, 150, 150);//后面的数字表示位置       
    317     }
    318 
    319     public void InsertActiveChart(Microsoft.Office.Interop.Excel.XlChartType ChartType, string ws, int DataSourcesX1, int DataSourcesY1, int DataSourcesX2, int DataSourcesY2, Microsoft.Office.Interop.Excel.XlRowCol ChartDataType)//插入图表操作       
    320     {
    321         ChartDataType = Microsoft.Office.Interop.Excel.XlRowCol.xlColumns;
    322         wb.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    323         {
    324             wb.ActiveChart.ChartType = ChartType;
    325             wb.ActiveChart.SetSourceData(GetSheet(ws).get_Range(GetSheet(ws).Cells[DataSourcesX1, DataSourcesY1], GetSheet(ws).Cells[DataSourcesX2, DataSourcesY2]), ChartDataType);
    326             wb.ActiveChart.Location(Microsoft.Office.Interop.Excel.XlChartLocation.xlLocationAsObject, ws);
    327         }
    328     }
    329 
    330     /// <summary>
    331     /// 保存文档 
    332     /// </summary>
    333     /// <returns>是否保存成功</returns>
    334     public bool Save()
    335     {
    336         if (string.IsNullOrEmpty(mFilename))
    337         {
    338             return false;
    339         }
    340         else
    341         {
    342             try
    343             {
    344                 wb.Save();
    345                 return true;
    346             }
    347             catch (Exception ex)
    348             {
    349                 return false;
    350             }
    351         }
    352     }
    353 
    354     /// <summary>
    355     /// 文档的另存为
    356     /// </summary>
    357     /// <param name="FileName">另存为名称</param>
    358     /// <returns>是否保存成功</returns>
    359     public bool SaveAs(object FileName)//文档另存为       
    360     {
    361         try
    362         {
    363             wb.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    364             return true;
    365         }
    366         catch (Exception ex)
    367         {
    368             return false;
    369         }
    370     }
    371 
    372     /// <summary>
    373     /// 将文档另存为Html页
    374     /// </summary>
    375     /// <param name="HtmlName">Html页面名称</param>
    376     /// <returns>是否保存成功</returns>
    377     public bool SaveAsHtml(object HtmlName)//文档另存为       
    378     {
    379         try
    380         {
    381             wb.SaveAs(HtmlName, Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    382             return true;
    383         }
    384         catch (Exception ex)
    385         {
    386             return false;
    387         }
    388     }
    389 
    390     /// <summary>
    391     /// 关闭一个Excel对象,销毁对象
    392     /// </summary>
    393     public void Close()
    394     {
    395 
    396         wb.Close(Type.Missing, Type.Missing, Type.Missing);
    397         wbs.Close();
    398         app.Quit();
    399         wb = null;
    400         wbs = null;
    401         app = null;
    402         GC.Collect();
    403     }
    404 
    405 
    406     #region Kill Special Excel Process
    407     [DllImport("user32.dll", SetLastError = true)]
    408     static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
    409 
    410     //推荐这个方法,找了很久,不容易啊 
    411     public void KillSpecialExcel()
    412     {
    413         try
    414         {
    415             if (app != null)
    416             {
    417                 int lpdwProcessId;
    418                 GetWindowThreadProcessId(new IntPtr(app.Hwnd), out lpdwProcessId);
    419 
    420                 System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();
    421             }
    422         }
    423         catch (Exception ex)
    424         {
    425             Console.WriteLine("Delete Excel Process Error:" + ex.Message);
    426         }
    427     }
    428     #endregion
    429 
    430 }
    View Code

    参考:http://blog.sina.com.cn/s/blog_4adf31ea0100ifi3.html

       http://blog.csdn.net/zhanglei5415/article/details/5396311

       http://www.cnblogs.com/wang_yb/articles/1750419.html

       http://www.open-open.com/code/view/1420029490093

  • 相关阅读:
    几个基本trick
    CSP2019 树上的树 口胡
    To do List
    对代码风格的探索(持续更新)
    我回来了。
    年度悲剧
    最短路
    平衡树
    线段树-模板
    jmeter断言之JSON Assertion
  • 原文地址:https://www.cnblogs.com/gaozejie/p/5195952.html
Copyright © 2020-2023  润新知