C#操作WPS表格

方法1、后期绑定动态调用。通过System.Type动态创建对象,避免直接依赖 COM 引用:

using System;

using System.Runtime.InteropServices;

class Program

{

static void Main()

{

object wpsApp = Activator.CreateInstance(Type.GetTypeFromProgID("Ket.Application"));

dynamic excel = wpsApp;

excel.Visible = true;

dynamic workbook = excel.Workbooks.Add();

dynamic sheet = workbook.Sheets[1];

sheet.Cells[1, 1].Value = "Hello WPS!";

workbook.SaveAs("C:\\Test.xlsx");

workbook.Close();

excel.Quit();

Marshal.ReleaseComObject(excel);

}

}

方法2:在C#中通过COM操作WPS Excel文件时,需引用WPS安装目录下的etapi.dll文件,并使用对应的ProgID创建实例。

3、截图例子:

using System;

using System.Drawing;

using System.Drawing.Imaging;

using System.Runtime.InteropServices;

using System.Windows.Forms;

class Program

{

STAThread\] // 剪贴板操作需要STA线程 static void Main() { try { // 创建Excel/WPS实例 object wpsApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application") ?? Type.GetTypeFromProgID("Ket.Application")); dynamic excel = wpsApp; excel.Visible = true; // 必须可见才能截图 // 打开指定的Excel文件 string filePath = @"c:\\1.xls"; dynamic workbook = excel.Workbooks.Open(filePath); dynamic sheet = workbook.Sheets\[1\]; // 选择要截图的区域(A1到P25) dynamic range = sheet.Range("A1:P25"); range.Select(); // 复制为图片到剪贴板 range.CopyPicture(XlPictureAppearance.xlScreen, XlCopyPictureFormat.xlBitmap); // 从剪贴板获取图片 if (Clipboard.ContainsImage()) { Image img = Clipboard.GetImage(); // 保存图片到C盘 string savePath = @"C:\\ExcelScreenshot.png"; img.Save(savePath, ImageFormat.Png); Console.WriteLine($"截图已保存至:{savePath}"); } // 清理资源 workbook.Close(false); excel.Quit(); Marshal.ReleaseComObject(range); Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(excel); } catch (Exception ex) { Console.WriteLine($"错误发生:{ex.Message}"); } finally { // 强制垃圾回收 GC.Collect(); GC.WaitForPendingFinalizers(); } } } // 需要添加的COM引用 public enum XlPictureAppearance { xlScreen = 1, xlPrinter = 2 } public enum XlCopyPictureFormat { xlBitmap = 2, xlPicture = -4147 } 4、截图例子: using System; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using System.Windows.Forms; class Program { \[STAThread

static void Main()

{

try

{

// 创建WPS实例

object wpsApp = Activator.CreateInstance(Type.GetTypeFromProgID("Ket.Application"));

dynamic excel = wpsApp;

excel.Visible = true; // 必须可见才能截图

// 打开现有工作簿

dynamic workbook = excel.Workbooks.Open(@"C:\1.xls");

dynamic sheet = workbook.Sheets[1]; // 获取第一个工作表

// 选择要截图的区域(A1到P25)

dynamic range = sheet.Range("A1:P25");

range.Select();

// 复制为图片到剪贴板

range.CopyPicture(XlPictureAppearance.xlScreen, XlCopyPictureFormat.xlBitmap);

// 从剪贴板获取图片

if (Clipboard.ContainsImage())

{

Image img = Clipboard.GetImage();

// 保存图片到C盘

string savePath = @"C:\ExcelScreenshot2.png";

img.Save(savePath, ImageFormat.Png);

Console.WriteLine($"截图已保存至:{savePath}");

}

// 清理资源

workbook.Close(false);

excel.Quit();

Marshal.ReleaseComObject(range);

Marshal.ReleaseComObject(sheet);

Marshal.ReleaseComObject(workbook);

Marshal.ReleaseComObject(excel);

}

catch (Exception ex)

{

Console.WriteLine($"错误发生:{ex.Message}");

}

finally

{

// 强制垃圾回收

GC.Collect();

GC.WaitForPendingFinalizers();

}

}

}

// 需要添加的COM引用

public enum XlPictureAppearance

{

xlScreen = 1,

xlPrinter = 2

}

public enum XlCopyPictureFormat

{

xlBitmap = 2,

xlPicture = -4147

}

5、

using System;

class Program

{

static void Main()

{

try

{

Type excelType = Type.GetTypeFromProgID("KWPS.Application"); // WPS表格的ProgID

if (excelType != null)

{

dynamic excelApp = Activator.CreateInstance(excelType);

excelApp.Visible = true; // 让WPS表格可见,以便观察

Console.WriteLine("WPS Excel COM 对象创建成功!按Enter退出...");

Console.ReadLine();

excelApp.Quit(); // 关闭WPS

}

else

{

Console.WriteLine("未找到 WPS Excel COM 组件注册。");

}

}

catch (Exception ex)

{

Console.WriteLine($"出错: {ex.Message}");

}

}

}

相关推荐
wjhx2 分钟前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
YCY^v^6 分钟前
JeecgBoot 项目运行指南
java·学习
人间打气筒(Ada)17 分钟前
jenkins基于Pipeline发布项目
java·pipeline·jenkins·流水线·ci·cd·cicd
爬山算法22 分钟前
Hibernate(88)如何在负载测试中使用Hibernate?
java·后端·hibernate
自不量力的A同学26 分钟前
Solon AI v3.9 正式发布:全能 Skill 爆发
java·网络·人工智能
万岳科技系统开发37 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
独断万古他化41 分钟前
【Spring 原理】Bean 的作用域与生命周期
java·后端·spring
*小海豚*1 小时前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
心疼你的一切1 小时前
Unity异步编程神器:Unitask库深度解析(功能+实战案例+API全指南)
深度学习·unity·c#·游戏引擎·unitask
撩得Android一次心动1 小时前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata