1 添加名称空间引用

【C#】_Excel操作_使用方法 - 图1
【C#】_Excel操作_使用方法 - 图2

<

  1. //用到的名空间
  2. using Excel = Microsoft.Office.Interop.Excel;
  3. using System.Reflection;
  4. using Microsoft.Office.Core;//使用Nothing
  5. using System.Runtime.InteropServices;//导入dll

2 Excel应用的创建与销毁

2.1 创建Application并销毁

  1. //创建excel应用程序
  2. Excel.Application myApp = new Excel.Application();
  3. //处理代码
  4. //关闭应用程序
  5. myApp.Quit();
  6. System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);
  7. myApp = null;

2.2 杀死Excel进程

方法一:

  1. public class PublicMethod
  2. {
  3. [DllImport("User32.dll", CharSet = CharSet.Auto)]
  4. public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
  5. public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
  6. {
  7. IntPtr t = new IntPtr(excel.Hwnd);//得到这个句柄,具体作用是得到这块内存入口
  8. int k = 0;
  9. GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
  10. System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
  11. p.Kill(); //关闭进程k
  12. }
  13. }

方法二:

  1. //创建进程对象
  2. Process[] ExcelProcess = Process.GetProcessesByName("Excel");
  3. //关闭进程
  4. foreach (Process p in ExcelProcess)
  5. {
  6. p.Kill();
  7. }

3 打开Excel数据表

以2019年上半年居民收入和消费支出情况数据为例,开展本博文的相关实验

3.1 由Excel应用打开和关闭数据表的两种方式

  1. object missing = System.Reflection.Missing.Value;//设置object的默认值,需要添加名称空间using System.Reflection;

(1) open方式—打开已有文件

  1. //打开实验数据
  2. string str = @"E:\C#\Example200\LearnExcel\LearnExcel\data.xlsx";
  3. Excel.Workbook wb = myApp.Workbooks.Open(str);
  4. Excel.WorkShee ws = myApp.WoekSheets.Add();
  5. //....
  6. ws.Save();
  7. //关闭数据表
  8. wb.Close();
  9. myApp.Quit();
  10. myApp = null;
  11. System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);

(2) Add() — 先创建表格之后再保存到指定路径的方法

  1. //打开实验数据
  2. string str = @"E:\C#\Example200\LearnExcel\LearnExcel\data.xlsx";
  3. Excel.Workbook wb = myApp.Workbooks.Add(true);
  4. Excel.WorkShee ws = myApp.WorkSheets.Add();
  5. //....
  6. ws.SaveAs(str);
  7. //关闭数据表
  8. wb.Close();
  9. myApp.Quit();
  10. myApp = null;
  11. System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);

3.2 打开数据表的工作表

  1. //根据索引获取感兴趣的数据表
  2. Excel.Worksheet ws = wb.Worksheets[1];//sheet的索引从1开始
  3. //获取工作表的名称
  4. string wsName = ws.Name;
  5. //数据表的行数
  6. int wsRows = ws.Rows.Count;
  7. //数据表的列数
  8. int wsColumns = ws.Columns.Count;
  9. //数据表的有效数据行数
  10. int wsUsedRows = ws.UsedRange.Rows.Count;
  11. //数据表的有效数据列数
  12. int wsUsedColumns = ws.UsedRange.Columns.Count;

3.3添加数据表

先判断是否存在同名的数据表,不存在再创建

  1. for (int i = 1; i < openwb.Worksheets.Count; i++) //循环sheet工作表
  2. {
  3. string sheet = ((Worksheet)openwb.Worksheets[i]).Name;
  4. sheets.Add(sheet);
  5. }
  6. //--------------------------------定义新增Excel工作表名称------------------------------
  7. string addsheet = "新增工作表";
  8. if (sheets.Contains(addsheet)) //判断Excel中是否存在该工作表
  9. {
  10. Console.WriteLine("新增工作表已存在");
  11. }
  12. else //没有则新增该工作表
  13. {
  14. ws = (Worksheet)openwb.Worksheets.Add(missing, missing, 1, missing); //添加新的Excel工作表
  15. ws.Name = addsheet;
  16. openwb.Save();//保存Excel文件
  17. App.DisplayAlerts = false;//不显示提示对话框
  18. //App.Visible = true;
  19. }

3.4 对数据表的操作

字体相关的设置

  1. 属性 功能
  2. Size 字号的大小
  3. Bold 是否加粗
  4. Italic 是否倾斜
  5. colorIndex 文字的颜色
  6. SubScript 是否下标
  7. Superscript 是否上标
  8. Color 字体颜色
  9. 行高列宽设置:
  10. 使用ColumnWidthRowHeight两个属性设置
  1. ws.Rows[1, Missing.Value].Delete(Excel.XlDeleteShiftDirection.xlShiftUp);//删除第一行
  2. ws.Cells[2, 1].HorizontalAlignment = XlVAlign.xlVAlignCenter;//垂直居中
  3. ws.Cells[2, 1].HorizontalAlignment = XlHAlign.xlHAlignCenter;//水平居中
  4. ws.Rows[1, Missing.Value].Font.Bold = true;//设置是否粗体
  5. ws.Cells[1, "A"].Font.Size = 8;//设置字体大小
  6. ws.Rows[1, Missing.Value].Interior.ColorIndex = 3;//设置第一行为红色
  7. ws.get_Range("A1", "P1").Borders.LineStyle = 1;//设置表格的线宽
  8. //删除数据表的第一行第一个元素(下边数据上移)
  9. ws.Cells[1, 1].Delete(Excel.XlDeleteShiftDirection.xlShiftUp);
  10. //删除工作表第一行第三列(右侧单元格左移)
  11. ws.Cells[1, 3].Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft);
  12. ws.Rows[3, Missing.Value].RowHeight = 5;//设置行高
  13. ws.Rows[3, Missing.Value].ColumnWidth = 5;//设置列宽
  14. ws.get-Range("A1").EntireColumn.NumberFormat = "@";//将A1列设置为【文本】格式

3.5 思维导图

【C#】_Excel操作_使用方法 - 图3

4 对单元格的操作

4.1 获取单元格的信息

  1. Excel.Range rang = (Excel.Range)ws.Cells[2, 2];//单元格B2
  2. rang.EntireColumn.AutoFit();//自动列宽
  3. string content = rang.Text;//该单元格文本
  4. double height = rang.Height;//单元格的高度
  5. double width = rang.Width;//单元格的宽度

4.2 设置单元格的值

  1. //设置单元格的值
  2. ws.Cells[2, 3] = "null";

4.3 合并单元格

  1. //合并单元格
  2. Excel.Range mergeRange = ws.get_Range("A1", "b2");
  3. mergeRange.Merge();

4.4 将DataTable数据添加到数据表

  1. DataTable dt = new DataTable();
  2. //添加表头
  3. dt.Columns.Add("姓名");
  4. dt.Columns.Add("年龄");
  5. dt.Columns.Add("性别");
  6. //添加数据项
  7. dt.Rows.Add("姓名", "年龄", "性别");
  8. dt.Rows.Add("张三", "23", "男");
  9. dt.Rows.Add("李思", "12", "女");
  10. dt.Rows.Add("张琴", "33", "女");
  11. dt.Rows.Add("王高", "62", "男");
  12. dt.Rows.Add("郑涛", "56", "男");
  13. int rowIndex = 1;
  14. foreach (DataRow row in dt.Rows)
  15. {
  16. for (int colIndex = 0; colIndex < dt.Columns.Count; colIndex++)
  17. {
  18. ws.Cells[rowIndex, colIndex + 1] = row[colIndex].ToString();
  19. }
  20. rowIndex++;
  21. }

原文链接:https://blog.csdn.net/m1m2m3mmm/article/details/96010380