【问题标题】:Copy to clipboard limitation复制到剪贴板限制
【发布时间】:2013-04-07 16:16:13
【问题描述】:

关于这个主题的许多其他问题,我仍然没有找到可以避免我的问题的东西。

我想知道剪贴板在复制粘贴处理方面有哪些限制,并针对特定用途和程序 ID 限制其复制粘贴功能。

因为,我一直在为我的公司开发一个软件,该软件采用 Word/Excel 和 PowerPoint 中的模板,通过每天更换图片并粘贴模板中的新图表和图片来自动生成报告。

但是,我担心,因为它似乎存在一些关于复制到剪贴板的限制

CopyBitmapToClipboard

ActiveWindow.View.PasteSpecial()

当我将表格/图像复制到剪贴板并将其粘贴到 Word/Excel/PowerPoint 中时,这很好,但如果我现在有 10 个同时生成的并行报告并使用复制粘贴机制,它会发生它会将其复制到另一个报表当前正在使用的 Word/Excel/PowerPoint 中。

考虑到,我有 1 个文档,并且将一个巨大的表格复制到剪贴板到 powerpoint 中,最好的情况是 1 秒(不需要),这意味着在 1 天内,我可以最多生成

1 copy paste procedure = 1 second

1minute = 60 second means 60 copy paste

1hour = 60min x 60 copy paste

1day = 24hours x 3600 copy paste

意味着我总共有 86400 个复制粘贴/报告。这是不可能的。一个文档永远不会花费至少 1 秒的时间来完成(对于大约 20 页的报告、带有 30 张幻灯片的 powerpoint、带有 6 张的 excel 工作表)。如何避免复制到剪贴板的内容被粘贴到错误的文档中,因为两个文档都使用了粘贴功能。

所以,我想知道,是否可以在我的剪贴板中提供参考,告诉他,只复制他的 word/excel/powerpoint 中的内容,而不是复制我刚刚复制的内容 CTRL +C 和 CTRL+V 在错误的文档中?

目前,我们每天要生成大约 50 份报告(考虑到几个月前我们有 2 份报告要生成),这些报告计划以 5 分钟为间隔,但是我们将有 86400 的那一天会发生什么每日报告生成?复制粘贴功能会搞砸所有报告并粘贴到错误的报告中。我可能不会在那里提供帮助,但我想防止这种影响。

我正在用 C#/.NET 编写我的软件,但我无法在其中编写来捕捉当前计划/报告是否正在生成,因为我运行了一个 .bat 来执行使用我编写的程序创建报告。

**已编辑: 我的 .bat 的内容是: myprogram.exe /objectsourceprogram="" /sourcefile="my template.doc/xls/ppt" /destinationfile="my destination.doc/xls/ppt"

我只是在调度我的批处理文件,唯一可以做的就是等待一个调度完成后再开始下一个调度,但这会产生间隔

【问题讨论】:

  • 你没有比复制粘贴更好的选择吗?也许您可以使用这两个应用程序的 API 将数据从一个应用程序移动到另一个应用程序。
  • 您可以使用 OLE 插入图表/等,而不是复制/粘贴
  • 我将图片保存在一个临时文件中,这有助于我避免复制粘贴过程,但表格被复制到剪贴板中,因为我的公司希望我在另一侧为 PowerPoint 再次生成一个真实的表而不是图像。我正在使用 NetOffice(微软的一种处理方式)。
  • @mike27015 为什么不直接用 Excel 中的数据在 PPT 中建表呢? PPT 表格的 VBA 导航并不难,如果您愿意,我可以发布一个示例。
  • @DavidZemens 我没有为 VBA 实现任何代码。原因?您在 VBA 中一次又一次地创建相同的代码,这又是手动工作,需要时间来避免。如前所述,复制粘贴程序的问题将在未来出现,届时每天将有 86k 份报告要做。表格,一切都正确完成了,只有当多个文档打开时复制/粘贴将不起作用,它会将其粘贴到错误的一个。

标签: c# excel ms-word powerpoint copy-paste


【解决方案1】:

我也在 Word 和 Excel 中处理过自动生成的报告。你这样做很慢,难怪它很慢 - .NET COM 互操作非常慢,然后你的进程使用其他线程,所以现在你必须在线程之间进行编组和同步,因为 Office 是单线程的。

复制/粘贴是高级用户功能,您可以将其用作 hack,但将其作为执行任务的主要方式是一个糟糕的选择。

更好的选择:Office API(VSTO,有人吗?) - 我很确定您在报告方面提出的任何建议都可以通过 API 重现。当心 - API 调用过多,您的函数可能会运行得更慢。

最佳选择:OpenXML SDK。由于您仍在使用复制/粘贴,因此此处的学习曲线可能会很陡峭,但回报是您的文档处理时间将减少几个数量级。

【讨论】:

  • 我正在使用带有 VSTO 的 NetOffice。我想,我会看看 OpenXML SDK。我可以克服图像的复制粘贴过程,同时将它们存储在临时文件中,但表格-> 也将保存为图像,但公司需要 Excel/PowerPoint 中的真实表格。顺便说一句,表格的输入最初是 HTML 代码,我将其复制到剪贴板并在粘贴到 Excel 时生成真实表格,我将表格复制到 PowerPoint 并根据我的 Excel 表格创建一个真实的 PowerPoint 表格。
  • 如果 HTML 是您的源数据,您将遇到更大的问题,因为您无法可靠地解析它。至少有一个库可以做到这一点 - Aspose - 但它非常昂贵。我正在使用它将 HTML 模板转换为我当前项目中的 Word 文档
  • 否,HTML 正在正确粘贴到 Word/Excel 中。在 Word 中,它会生成表格,在 Excel 中,复制到剪贴板并粘贴时,它会从 HTML 代码生成表格,并将表格范围复制到 powerpoint 中,读取所有行,并创建一个看起来更好的新表格。我使用 Regex 来解析 HTML,它可以工作。 item.SheetObject.CopyTableToClipboard(true);字符串 html = Clipboard.GetText(TextDataFormat.Html);我会看看 OpenXML SDK 并希望找到一些东西来减少时间不足。
  • OOXML 绝对可以完成这些任务,但并不容易和快速,尤其是在应用程序之间复制/粘贴时。在每个应用程序中创建新对象比尝试复制它们更容易 - 有太多元素可以保存对文档各个部分的引用。找到VS2008的OOXML工具,对理解前提有很大帮助
  • 谢谢。我从微软那里得到了同样的答复。最好的解决方案是openxmldeveloper.org 感谢您的帮助
猜你喜欢
  • 2015-08-27
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2013-05-16
相关资源
最近更新 更多