C#上位机使用Microsoft.Office.Interop.Excel和EPPlus库对Excel或WPS表格进行写操作
一、使用Microsoft.Office.Interop.Excel
库
1、通过NuGet包管理器添加引用
按照下图中红框所示进行操作。
需要安装Microsoft.Office.Interop.Excel
包
添加Microsoft Office 16.0 Object Library
进引用列表(往Excel里面插入图片需要用到)
2、编写一个将DataGridView的数据写入到Excel里面并保存
csharp
public void WriteExcelFromDgv(DataGridView dgv)
{
//定义一个工作簿对象
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
//定义Excel工作表
Microsoft.Office.Interop.Excel.Worksheet worksheet = excelApp.Workbooks.Add().Worksheets[1];
//获取总行数和总列数
int rowCount = dgv.Rows.Count;
int columnCount = dgv.Columns.Count;
//填写列标题
for (int i = 0; i < columnCount; i++)
{
worksheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
}
//填写表格数据
for (int i = 0; i < rowCount - 1; i++)
{
for (int j = 0; j < columnCount; j++)
{
worksheet.Cells[i + 2, j + 1] = dgv.Rows[i + 1].Cells[j].Value;
}
}
//设置列宽和数据一致
worksheet.Columns.AutoFit();
//保存文件
worksheet.SaveAs(@"C:\Users\new\Desktop\1234.xlsx");
//释放对象。不释放对象的话,打开excel会弹出有程序占用,只能以只读的方式打开。
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
excelApp = null;
}
csharp
private void button1_Click(object sender, EventArgs e)
{
objExcelRW.WriteExcelFromDgv(this.dataGridView1);
}
3、效果展示
用这个库在编写代码进行单元格格式进行设置时,不会智能提示,编写起来不够方便。
4、编写一个方法将图片写入到Excel中
csharp
public void WriteImageInExcel(string path)
{
//创建一个新的Excel文件----------
//定义一个工作簿对象
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
//定义Excel工作表
Microsoft.Office.Interop.Excel.Worksheet worksheet = excelApp.Workbooks.Add().Worksheets[1];
//------------------------------
/*获取已经存在的Excel文件*****************
//获取已创建好的工作簿路径
string excelPath = @"C:\Users\new\Desktop\0830.xlsx\";
//将现有工作簿加入到已经定义好的工作簿集合
excelApp.Workbooks.Add(excelPath);
//获取第一个工作表
Microsoft.Office.Interop.Excel.Worksheet worksheet = excelApp.Worksheets[1];
*/
//从指定位置读取图片
string imagePath = path;
//AddPicture():
//第1个参数,放的是图片路径;第2个和第3个是枚举类型,固定的值;第4个参数是图片左上角距离Excel表格左边的距离;
//第5个参数是图片左上角距离Excel表格上边的距离;第6个参数是图片的宽度;第7个参数是图片的高度。
worksheet.Shapes.AddPicture(imagePath, Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoTrue, 10, 50, 90, 100);
//保存文件
worksheet.SaveAs(@"C:\Users\new\Desktop\0830.xlsx");
//释放对象。不释放对象的话,打开excel会弹出有程序占用,只能以只读的方式打开。
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
excelApp = null;
}
csharp
private void button3_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
DialogResult result = openFileDialog.ShowDialog();
string path = openFileDialog.FileName;
objExcelRW.WriteImageInExcel(path);
}
5、效果展示
二、使用Epplus
库
1、通过NuGet包管理器添加引用
按照下图中红框所示进行操作。
需要安装EPPlus
包
2、插入图片进已经存在的Excel中
csharp
public void WriteDataInExcelByEpplus(string filePath,string imagePath)
{
//需要加这一句,不然会报错
OfficeOpenXml.ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
//通过指定路径创建工作簿对象
OfficeOpenXml.ExcelPackage package = new OfficeOpenXml.ExcelPackage(filePath);
//获取该工作簿的第一个工作表
OfficeOpenXml.ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
//从指定位置读取图片
//System.Drawing.Image image = System.Drawing.Image.FromFile(imagePath);
//定义一个图片对象
var pic = worksheet.Drawings.AddPicture("logo", imagePath);
//图片放置的位置。
//第1个参数:从第2行下边框开始;第2个参数:偏移行的像素距离;第3个参数:从第0列开始右边框;第4个参数:偏移列的像素距离
pic.SetPosition(2, 10, 0, 10);
//图片的大小设置。设置图片的宽度和高度
pic.SetSize(90, 100);
//保存工作簿
package.Save();
}
csharp
private void button4_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
DialogResult result = openFileDialog.ShowDialog();
string filePath = openFileDialog.FileName;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
DialogResult result1 = openFileDialog.ShowDialog();
string imagePath = openFileDialog.FileName;
objExcelRW.WriteDataInExcelByEpplus(filePath, imagePath);
}
如果需要程序创建新的Excel,只需将上面相应的代码更改为下面这样即可。
csharp
OfficeOpenXml.ExcelPackage excelPackage = new OfficeOpenXml.ExcelPackage();
OfficeOpenXml.ExcelWorksheet excelWorksheet = excelPackage.Workbook.Worksheets.Add("123");
excelPackage.SaveAs(@"C:\Users\new\Desktop\0902.xlsx");
3、效果展示