功能 是 对当前活动的wps表格进行操作: 在1行前面插入1行, 在C列前面插入2列, C2单元格赋值“类型”,D2单元格赋值“排重“。
老提示连不上wps 表格,各位高手看看,怎么修改一下。还是我的电脑有问题,
using System;
using System.Runtime.InteropServices;
public static void Exec(Quicker.Public.StepContext context)
{
object wpsApp = null;
object activeSheet = null;
try
{
// ==== 1. 连接逻辑(与成功测试脚本完全一致)====
// 只尝试获取已运行的实例,不再尝试创建新实例,以保持与测试行为一致。
string[] progIds = { "KET.Application", "ET.Application", "Excel.Application" };
bool connected = false;
foreach (string progId in progIds)
{
try
{
wpsApp = Marshal.GetActiveObject(progId);
connected = true;
break; // 成功即退出
}
catch (COMException)
{
// 连接失败,继续尝试下一个
}
}
if (!connected || wpsApp == null)
{
// 如果循环结束都未连接成功,直接抛异常
throw new Exception("无法连接到正在运行的WPS表格。\n请确保:\n1. WPS表格窗口已打开并处于活动状态\n2. 已打开一个工作簿文件\n3. 可尝试重启WPS表格程序再试");
}
// ==== 2. 获取活动工作表 ====
Type appType = wpsApp.GetType();
activeSheet = appType.InvokeMember("ActiveSheet",
System.Reflection.BindingFlags.GetProperty, null, wpsApp, null);
if (activeSheet == null)
{
throw new Exception("已连接,但未找到活动工作表。请确保WPS中打开了工作簿。");
}
Type sheetType = activeSheet.GetType();
// ==== 3. 执行表格操作 ====
// a. 在第1行前插入1行
object rows = sheetType.InvokeMember("Rows",
System.Reflection.BindingFlags.GetProperty, null, activeSheet,
new object[] { "1:1" });
rows.GetType().InvokeMember("Insert",
System.Reflection.BindingFlags.InvokeMethod, null, rows, null);
Marshal.ReleaseComObject(rows);
// b. 在C列前插入2列
for (int i = 0; i < 2; i++)
{
object columns = sheetType.InvokeMember("Columns",
System.Reflection.BindingFlags.GetProperty, null, activeSheet,
new object[] { "C:C" });
columns.GetType().InvokeMember("Insert",
System.Reflection.BindingFlags.InvokeMethod, null, columns, null);
Marshal.ReleaseComObject(columns);
}
// c. 为C2和D2单元格赋值
object cellC2 = sheetType.InvokeMember("Cells",
System.Reflection.BindingFlags.GetProperty, null, activeSheet,
new object[] { 2, 3 }); // C2
cellC2.GetType().InvokeMember("Value",
System.Reflection.BindingFlags.SetProperty, null, cellC2,
new object[] { "类型" });
Marshal.ReleaseComObject(cellC2);
object cellD2 = sheetType.InvokeMember("Cells",
System.Reflection.BindingFlags.GetProperty, null, activeSheet,
new object[] { 2, 4 }); // D2
cellD2.GetType().InvokeMember("Value",
System.Reflection.BindingFlags.SetProperty, null, cellD2,
new object[] { "排重" });
Marshal.ReleaseComObject(cellD2);
// ==== 4. 操作完成 ====
throw new Exception("✅ 操作成功完成!\n1. 已在第1行前插入1行\n2. 已在C列前插入2列\n3. C2已赋值'类型'\n4. D2已赋值'排重'");
}
catch (Exception ex)
{
throw new Exception("表格操作结果:\n" + ex.Message);
}
finally
{
// ==== 5. 清理COM对象 ====
if (activeSheet != null)
{
try { Marshal.ReleaseComObject(activeSheet); } catch { }
}
if (wpsApp != null)
{
try { Marshal.ReleaseComObject(wpsApp); } catch { }
}
}
}