1 添加名称空间引用
<
//用到的名空间
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using Microsoft.Office.Core;//使用Nothing
using 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); //得到本进程唯一标志k
System.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];//单元格B2
rang.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