1 添加名称空间引用


<
//用到的名空间using Excel = Microsoft.Office.Interop.Excel;using System.Reflection;using Microsoft.Office.Core;//使用Nothingusing System.Runtime.InteropServices;//导入dll
2 Excel应用的创建与销毁
2.1 创建Application并销毁
//创建excel应用程序Excel.Application myApp = new Excel.Application();//处理代码//关闭应用程序myApp.Quit();System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);myApp = null;
2.2 杀死Excel进程
方法一:
public class PublicMethod{[DllImport("User32.dll", CharSet = CharSet.Auto)]public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);public static void Kill(Microsoft.Office.Interop.Excel.Application excel){IntPtr t = new IntPtr(excel.Hwnd);//得到这个句柄,具体作用是得到这块内存入口int k = 0;GetWindowThreadProcessId(t, out k); //得到本进程唯一标志kSystem.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用p.Kill(); //关闭进程k}}
方法二:
//创建进程对象Process[] ExcelProcess = Process.GetProcessesByName("Excel");//关闭进程foreach (Process p in ExcelProcess){p.Kill();}
3 打开Excel数据表
以2019年上半年居民收入和消费支出情况数据为例,开展本博文的相关实验
3.1 由Excel应用打开和关闭数据表的两种方式
object missing = System.Reflection.Missing.Value;//设置object的默认值,需要添加名称空间using System.Reflection;
(1) open方式—打开已有文件
//打开实验数据string str = @"E:\C#\Example200\LearnExcel\LearnExcel\data.xlsx";Excel.Workbook wb = myApp.Workbooks.Open(str);Excel.WorkShee ws = myApp.WoekSheets.Add();//....ws.Save();//关闭数据表wb.Close();myApp.Quit();myApp = null;System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);
(2) Add() — 先创建表格之后再保存到指定路径的方法
//打开实验数据string str = @"E:\C#\Example200\LearnExcel\LearnExcel\data.xlsx";Excel.Workbook wb = myApp.Workbooks.Add(true);Excel.WorkShee ws = myApp.WorkSheets.Add();//....ws.SaveAs(str);//关闭数据表wb.Close();myApp.Quit();myApp = null;System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);
3.2 打开数据表的工作表
//根据索引获取感兴趣的数据表Excel.Worksheet ws = wb.Worksheets[1];//sheet的索引从1开始//获取工作表的名称string wsName = ws.Name;//数据表的行数int wsRows = ws.Rows.Count;//数据表的列数int wsColumns = ws.Columns.Count;//数据表的有效数据行数int wsUsedRows = ws.UsedRange.Rows.Count;//数据表的有效数据列数int wsUsedColumns = ws.UsedRange.Columns.Count;
3.3添加数据表
先判断是否存在同名的数据表,不存在再创建
for (int i = 1; i < openwb.Worksheets.Count; i++) //循环sheet工作表{string sheet = ((Worksheet)openwb.Worksheets[i]).Name;sheets.Add(sheet);}//--------------------------------定义新增Excel工作表名称------------------------------string addsheet = "新增工作表";if (sheets.Contains(addsheet)) //判断Excel中是否存在该工作表{Console.WriteLine("新增工作表已存在");}else //没有则新增该工作表{ws = (Worksheet)openwb.Worksheets.Add(missing, missing, 1, missing); //添加新的Excel工作表ws.Name = addsheet;openwb.Save();//保存Excel文件App.DisplayAlerts = false;//不显示提示对话框//App.Visible = true;}
3.4 对数据表的操作
字体相关的设置
属性 功能Size 字号的大小Bold 是否加粗Italic 是否倾斜colorIndex 文字的颜色SubScript 是否下标Superscript 是否上标Color 字体颜色行高列宽设置:使用ColumnWidth和RowHeight两个属性设置
ws.Rows[1, Missing.Value].Delete(Excel.XlDeleteShiftDirection.xlShiftUp);//删除第一行ws.Cells[2, 1].HorizontalAlignment = XlVAlign.xlVAlignCenter;//垂直居中ws.Cells[2, 1].HorizontalAlignment = XlHAlign.xlHAlignCenter;//水平居中ws.Rows[1, Missing.Value].Font.Bold = true;//设置是否粗体ws.Cells[1, "A"].Font.Size = 8;//设置字体大小ws.Rows[1, Missing.Value].Interior.ColorIndex = 3;//设置第一行为红色ws.get_Range("A1", "P1").Borders.LineStyle = 1;//设置表格的线宽//删除数据表的第一行第一个元素(下边数据上移)ws.Cells[1, 1].Delete(Excel.XlDeleteShiftDirection.xlShiftUp);//删除工作表第一行第三列(右侧单元格左移)ws.Cells[1, 3].Delete(Excel.XlDeleteShiftDirection.xlShiftToLeft);ws.Rows[3, Missing.Value].RowHeight = 5;//设置行高ws.Rows[3, Missing.Value].ColumnWidth = 5;//设置列宽ws.get-Range("A1").EntireColumn.NumberFormat = "@";//将A1列设置为【文本】格式
3.5 思维导图
4 对单元格的操作
4.1 获取单元格的信息
Excel.Range rang = (Excel.Range)ws.Cells[2, 2];//单元格B2rang.EntireColumn.AutoFit();//自动列宽string content = rang.Text;//该单元格文本double height = rang.Height;//单元格的高度double width = rang.Width;//单元格的宽度
4.2 设置单元格的值
//设置单元格的值ws.Cells[2, 3] = "null";
4.3 合并单元格
//合并单元格Excel.Range mergeRange = ws.get_Range("A1", "b2");mergeRange.Merge();
4.4 将DataTable数据添加到数据表
DataTable dt = new DataTable();//添加表头dt.Columns.Add("姓名");dt.Columns.Add("年龄");dt.Columns.Add("性别");//添加数据项dt.Rows.Add("姓名", "年龄", "性别");dt.Rows.Add("张三", "23", "男");dt.Rows.Add("李思", "12", "女");dt.Rows.Add("张琴", "33", "女");dt.Rows.Add("王高", "62", "男");dt.Rows.Add("郑涛", "56", "男");int rowIndex = 1;foreach (DataRow row in dt.Rows){for (int colIndex = 0; colIndex < dt.Columns.Count; colIndex++){ws.Cells[rowIndex, colIndex + 1] = row[colIndex].ToString();}rowIndex++;}
原文链接:https://blog.csdn.net/m1m2m3mmm/article/details/96010380
