当前位置: 首页 > news >正文

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}");
}
}
}


http://www.lryc.cn/news/593425.html

相关文章:

  • 大模型军备竞赛升级!Grok 4 携 “多智能体内生化” 破局,重构 AI 算力与 Agent 2.0 时代
  • 张 关于大语言模型(LLM)置信度研究的经典与前沿论文 :温度缩放;语义熵;自一致性;事实与反思;检索增强;黑盒引导;
  • [MySQL基础3] 数据控制语言DCL和MySQL中的常用函数
  • 一个基于阿里云的C端Java服务的整体项目架构
  • 阿里云ssl证书自动安装及续订(acme)
  • NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化
  • LRU算法及优化
  • SpringBoot五分钟快速入门指南
  • Java行为型模式---访问者模式
  • Nestjs框架: 理解 RxJS响应式编程的核心概念与实践
  • 如何构建未来的人-AI-环境智能教育生态系统
  • OpenCV 官翻 3 - 特征检测 Feature Detection
  • Vue 3 中导出 Excel 文件
  • 【Web APIs】JavaScript 自定义属性操作 ② ( H5 自定义属性 )
  • 光纤收发器上的指示灯各代表的含义
  • 【ChatOpenAI】常用方法详解
  • 如何设计一个软件项目管理系统:架构设计合集(六)
  • min_25筛学习笔记+牛客多校02E
  • AWS Partner: Sales Accreditation (Business)
  • C++命名空间深度解析:避免命名冲突的终极解决方案
  • Kafka、RabbitMQ 与 RocketMQ 高可靠消息保障方案对比分析
  • 【数据结构初阶】--双向链表(二)
  • 明细列表,明细grid中的默认按钮失效,配置按钮失效
  • windows wsl2-06-docker hello world
  • windows wsl ubuntu 如何安装 open-jdk8
  • rustdesk客户端编译
  • NX二次开发常用函数坐标转化UF_MTX4_csys_to_csys和UF_MTX4_vec3_multipl
  • 【REACT18.x】creat-react-app在添加eslint时报错Environment key “jest/globals“ is unknown
  • 【橘子分布式】gRPC(编程篇-中)
  • Vue3生命周期函数