You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Office365共享激活环境下Word自动化调用Excel.Select()触发许可证过期错误

问题描述
  • 环境:终端服务实例,已激活的Office365共享激活许可证,VB.NET/C#桌面应用
  • 触发错误:执行wrksht.Range("A2").Select()时抛出异常:
    This command is unavailable because the license to use this application has expired
    
    错误堆栈指向Microsoft.Office.Interop.Excel.Range.Select(),且错误非必现。
  • 关键现象:通过chrt.ChartData.Activate从Word自动化启动Excel时,Excel标题栏显示“Unlicensed Product”;手动打开Excel或其他Office自动化操作正常,仅图表关联的Excel工作表执行Select时报错。
解决方案

1. 移除.Select()调用(最优解)

Office后台自动化场景下,.Select()仅用于界面交互,完全不需要依赖选中操作来修改数据或格式。直接对Range对象执行操作即可规避许可证问题:

VB.NET代码修改

Dim chrt As _word.Chart = shp.Chart
chrt.ChartData.Activate()
Dim wrksht As _excel.Worksheet = chrt.ChartData.Workbook.WorkSheets(1)
' 替换报错的Select(),直接操作Range
wrksht.Range("A2").Value = "目标内容"
' 如需设置格式,直接调用对应方法
wrksht.Range("A2").Font.Bold = True

VBA宏修改

Sub Test()
Dim shp As InlineShape
Dim chrt As Chart
Dim wrksht As Excel.Worksheet

    Set shp = getInlineShapeFromTitle("Score_Graph_Question_15964_4")
    Set chrt = shp.Chart
    
    chrt.ChartData.Activate
    Set wrksht = chrt.ChartData.Workbook.Worksheets(1)
    
    ' 替换Select()为直接操作
    wrksht.Range("A1").FormulaR1C1 = "TEST 1"
    
    chrt.ChartData.Workbook.Application.Quit
End Sub

2. 修复Office365共享激活配置

针对终端服务场景,确保Office共享激活正常生效:

  • 验证服务器端Office激活状态:手动打开Excel,确认标题栏显示已激活,无“Unlicensed Product”提示。
  • 检查Office部署参数:使用Office部署工具(ODT)重新部署时,需在配置文件中添加SharedComputerLicensing="1",确保部署的是支持共享激活的Office版本(如Office 365 Enterprise/ProPlus)。
  • 清除Office许可证缓存:删除%ProgramData%\Microsoft\Office\ClickToRun\Licensing目录下的缓存文件,重启服务器后重新激活。

3. 显式创建Excel实例关联图表数据

绕过Word自动启动的无许可证Excel进程,手动创建已激活的Excel实例来处理图表数据:

Dim chrt As _word.Chart = shp.Chart
' 显式初始化Excel应用
Dim excelApp As New _excel.Application()
excelApp.Visible = False
' 获取图表数据工作簿路径
Dim workbookPath As String = chrt.ChartData.Workbook.FullName
' 用新实例打开工作簿
Dim targetWb As _excel.Workbook = excelApp.Workbooks.Open(workbookPath)
Dim targetWs As _excel.Worksheet = targetWb.Worksheets(1)

' 直接执行数据操作
targetWs.Range("A2").Value = "更新内容"

' 保存并清理资源
targetWb.Save()
targetWb.Close()
excelApp.Quit()
' 释放COM对象避免内存泄漏
System.Runtime.InteropServices.Marshal.ReleaseComObject(targetWs)
System.Runtime.InteropServices.Marshal.ReleaseComObject(targetWb)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)

4. 调整终端服务用户权限

确保运行应用的用户拥有足够权限:

  • 授予用户对Office安装目录(C:\Program Files\Microsoft Office\root)及许可证缓存目录(%ProgramData%\Microsoft\Office\ClickToRun)的读写权限。
  • 使用普通用户账户运行应用,避免系统账户,确保该账户已通过Office共享激活验证。

内容的提问来源于stack exchange,提问作者TechyGypo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:41:44