微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建 Microsoft 项目屏幕的 pdf 文件的选项,以便它可以作为 OLEObject

如何解决创建 Microsoft 项目屏幕的 pdf 文件的选项,以便它可以作为 OLEObject

我希望捕获 Microsoft Project 视图(视图的表数据和甘特图部分)的屏幕截图,保存为 pdf,以便 PDF 可以作为 OLE 对象加载到 Excel 工作表上。我已经尝试过 Editcopy 和 EditcopyPicture,但是这两个都是通过 Office 剪贴板工作的。办公室剪贴板仅限于 24 张图像,并且不会自我清洁。当放置到剪贴板时,也没有明显的能力告诉剪贴板是否保留/删除任何图像。似乎也没有任何使用 VBA 清除 Office 剪贴板的方法,尽管有使用 Windows 代码清除剪贴板的示例,但我怀疑这可能是与 Office 剪贴板不同的 Windows 剪贴板。我当前流程的问题是它使用了办公室剪贴板,我想消除它,因为一旦办公室剪贴板被填满,我就会看到时间损失,假设是由于换出旧图像为新图像腾出空间。

我使用的是 64 位 Windows 计算机,装有 Microsoft Office Project 2019 和 Office Pro 2019 套件。

由于我想作为 OLEObject 加载的文件类型是 PDF 或 xps,有没有办法可以使用 Fileprint 或 Printout 命令将 Microsoft Project 中的当前视图保存到 pdf 或 xps 文件中,我将然后纳入我的流程。我需要能够定义甘特图显示的开始和结束日期,并能够定义保存的文件名,以及定义我希望 PDF/XPS 导出文件的页数它尽可能可读。我目前使用 C:\export\export.xps 作为文件名和文件路径。

最理想的是创建 PDF 并作为 OLEObject 加载到 Excel 电子表格的过程是一个步骤,但我还没有找到任何可以完成此操作的代码。我已经在启用宏的电子表格中移植了很多要由 excel 执行的代码,这为我节省了 MS Project 为这部分代码花费的 90% 的处理时间。如果我能够保存 MS Project 屏幕的 pdf,我将拿起 PDF 并在 excel 代码中继续该过程。我可能需要在 Fileprint 命令之前和之后添加 Application.Updatedisplay 代码以避免看到对话框。 这是我的工作代码。唯一不起作用的部分是我能够创建过滤器 MS 项目屏幕上显示内容的 pdf:

  'show 12 columns and move the splitter
   Application.SetSplitBar ShowColumns:=11

  'adjust timescale to show weeks
   TimescaleEdit MajorUnits:=0,MinorUnits:=3,MajorLabel:=0,MinorLabel:=17,MinorTicks:=True,Separator:=True,TierCount:=2

    TierCount:=2
    If Order >= 20 Then
          'ScaleRow = Int(100 * 18 / Order)
           ScaleRow = Int(100 * 24 / Order)
         Else
           ScaleRow = 70
    End If
    TimescaleEdit Enlarge:=ScaleRow,TierCount:=2



   SelectRow
   localfin = Now()
   Debug.Print "Iteration Prep for SRA Summary Page- " & (((localfin - localst) * 24 * 60 * 60) & " 
      sec!")
   localst = Now()

   SelectAll
   Application.WrapText (3)
   Sort Key1:="Number10",Ascending1:=True
   Calculateall

  fullpath = "C:\Export\export.pdf"

  Debug.Print "MinDate= " & MinDate & " MaxDate= " & MaxDate
  Application.PrintOut copies:=1,Preview:=False,ActivePrinter:="Microsoft Print To PDF",Fromdate:=MinDate,todate:=MaxDate,PrToFileName:=fullpath,PrintToFile:=True

  localfin = Now()
  Debug.Print "Sort & PrintToPDF- " & (((localfin - localst) * 24 * 60 * 60) & " sec!")
  localst = Now()

MinDate 和 Maxdate 是显示在过滤任务视图中的最早和最晚日期。我在整个过程中计算执行时间,以确定我应该尝试优化编码的位置。 Scalerow 是一个缩放因子,我试图通过它来平衡文本字段所需的屏幕份额与甘特图屏幕右侧的份额。根据 Mindate 和 MaxDate 之间的周数,我还可以影响时间刻度数据以更改为甘特图的每周、每月或每季度显示。我还可以以合理的比例确定我需要捕获屏幕数据以供以后显示页面数。

我尝试过使用 documentexport,但认为此命令仅限于导出甘特图显示的文本部分。

crosoft 文档(“https://docs.microsoft.com/en-us/office/vba/api/Project.Application.DocumentExport”)表明它应该适用于 Microsoft 项目,但我无法使用此命令将任何内容保存到 PDF/XPS 文件。我想要/需要做的就是能够创建一个 pdf 文件(也许通过选择打印机,将其设置为认值,然后打印,尽管我没有成功找到任何代码来帮助我到达那里)。我正在尝试使用“Microsoft Print to PDF”打印机。

感谢任何帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。