当前位置: 首页 > 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.dtcms.com/a/287783.html

相关文章:

  • LVS工作模式和算法的总结
  • 【RK3576】【Android14】摄像头MIPI开发调试
  • 基于单片机智能插座设计/智能开关
  • 了解pycharm的基本运用
  • Qt笔记整理(1)
  • 使用PyInstaller打包 Python 工程
  • 【C++基础】内存对齐原则与性能影响:面试高频考点与真题解析
  • CSS篇——第二章 六十五项关键技能(下篇)
  • 统计学习方法的三要素
  • Github Actions Workflows 上传 Dropbox
  • 物联网-规则引擎的定义
  • 解决问题七大步骤
  • python基础复习
  • 【RL第一篇】强化学习入门:核心概念全面详解
  • 永磁同步电机控制算法--弱磁控制(变交轴CCR-VQV)
  • vue2 面试题及详细答案150道(141 - 150)
  • VUE2 学习笔记1
  • ndexedDB 与 LocalStorage:全面对比分析
  • 4 ASPICE的支持过程
  • docker构建springboot镜像
  • 【初识数据结构】CS61B中的基本图算法:DFS, BFS, Dijkstra, A* 算法及其来历用法
  • 字节跳动开源Seed-X 7B多语言翻译模型:28语种全覆盖,性能超越GPT-4、Gemini-2.5与Claude-3.5
  • 【开源项目】GPT学术优化 - GPT Academic
  • 探秘边缘安全架构设计要点解析
  • Linux 自旋锁
  • 四阶电商SEO审计指南:诊断流量漏洞→重建增长引擎(附免费工作簿)
  • 音频3A处理简介之AEC(回音消除)
  • 文生图-StoryGAN:用于故事可视化的顺序条件GAN
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • 路由器SDH POS接口