简介:Visio 2007是微软推出的专业流程图与矢量绘图工具,面向企业用户、设计师及技术人员,用于绘制组织结构图、流程图、网络图、UML模型图与数据库模型等,服务于项目规划、业务流程分析与系统设计等场景。资源同时提供32位与64位版本,可适配不同操作系统环境,64位版本在处理大型复杂图表时更能发挥内存优势。压缩包共214个文件,以opa、xml、dll、chm、msi、cab等安装与组件文件为主,另含少量exe、txt及配置文件,整体约374.54MB,属于完整的安装部署包。软件内置丰富形状库、连接线与模板样式,支持数据链接、多格式导出,并可与Word、Excel、PowerPoint集成,还允许通过VBA进行宏编程扩展。目前已有383人学习下载,适合需要快速搭建专业图表环境、完成流程梳理与文档记录的读者参考使用。
1. 拆开这个 2007 版流程图工具包:32 位和 64 位到底该装哪个
上周帮一个做系统集成的朋友整理项目文档,他甩过来一个压缩包,文件名是Visio 2007_32&64bit流程图绘制软件.rar,问我能不能在现在的机器上跑起来。我解压看了一眼,里面是一堆.cab文件——OfficeLR.cab、VisProWW.cab、IME32.cab、VisioLR.cab、Proof.cab、IME64.cab、OWOW64WW.cab、RbudLR.cab、OWOW64LR.cab。这不是一个绿色免安装的 exe,而是典型的 Office 2007 时代组件化安装包结构,32 位和 64 位的资源文件混在一起,需要按目标系统架构挑着装。
Visio 2007 是微软那套专业流程图和矢量绘图工具里的一个经典版本,定位很明确:给企业用户、系统设计师、技术文档写作者用的。它能画组织结构图、业务流程图、网络拓扑图、UML 模型图、数据库模型图,而且和 Word、Excel、PowerPoint 之间有数据链接和嵌入能力。放到今天看,它的界面确实老派,但形状库的完整度和连接线的自动路由逻辑,在画标准工程图时依然省事。这个包适合两类人:一是手头有老项目文档需要维护、不想升级到订阅制的从业者;二是想在一台隔离环境或旧系统里快速搭一套绘图工具、不依赖在线服务的技术人员。下面我按实际拆包和安装的顺序,把 32/64 位选择、cab 文件对应关系、安装后的配置和几个容易翻车的点讲清楚。
2. 32 位与 64 位资源包拆解:cab 文件对应关系与安装路径选择
2.1 先认清 cab 文件各自管什么
这个压缩包解压后没有setup.exe,只有一堆 cab。常见做法是配合 Office 2007 的安装引导程序使用,或者手动展开 cab 提取所需组件。我先把几个关键 cab 的用途列一下,方便你判断哪些必须留、哪些可以跳过。
| cab 文件名 | 主要用途 | 是否必须 |
|---|---|---|
VisProWW.cab | Visio 主程序核心文件,包含绘图引擎和形状库 | 必须 |
VisioLR.cab | Visio 语言资源,界面文字和帮助 | 必须 |
OfficeLR.cab | Office 共享语言资源,影响菜单和对话框 | 建议保留 |
Proof.cab | 拼写检查、校对工具 | 可选 |
IME32.cab | 32 位输入法编辑器组件 | 32 位系统需要 |
IME64.cab | 64 位输入法编辑器组件 | 64 位系统需要 |
OWOW64WW.cab | 64 位 Office 共享组件 | 64 位系统需要 |
OWOW64LR.cab | 64 位共享组件语言资源 | 64 位系统需要 |
RbudLR.cab | 语言相关资源,部分界面元素 | 可选 |
从文件名就能看出,IME32和IME64是互斥的,OWOW64系列只在 64 位环境出现。如果你把 32 位和 64 位的 cab 混在同一个安装目录里,安装程序可能会报“找不到有效源”或者复制到一半提示文件冲突。我一般会先建两个临时目录,把 32 位和 64 位资源分开,再根据目标机器决定用哪一组。
2.2 判断目标系统该用哪一套
判断逻辑不复杂,但有几个细节容易搞混。不是操作系统是 64 位就必须装 64 位 Visio,还要看你的 Office 套件整体架构。Visio 2007 作为 Office 家族成员,和同版本 Office 的位数最好保持一致,否则在嵌入对象和 VBA 宏调用时会出现兼容问题。
# 在 Windows 上查看系统架构和已装 Office 位数 # 方法一:看系统信息 systeminfo | findstr /B /C:"System Type" # 方法二:看已安装 Office 的位数(如果已装) # 打开注册表编辑器,定位到: # HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Outlook # 看 "Bitness" 键值,x86 或 x64 # 方法三:直接看 Program Files 目录 # 64 位 Office 通常装在 C:\Program Files\Microsoft Office\ # 32 位 Office 通常装在 C:\Program Files (x86)\Microsoft Office\上面这段命令和路径检查,目的是确认三件事:系统是 32 位还是 64 位、已装 Office 是 32 位还是 64 位、Visio 准备装到哪个目录。如果系统是 64 位但 Office 是 32 位,那 Visio 也应该选 32 位资源,否则 Word 里插入 Visio 绘图对象时可能直接报错。反过来,如果机器上没装 Office,只是单独用 Visio 画图导出,那 64 位系统装 64 位版本能更好利用内存,处理大图时卡顿会少一些。
2.3 手动展开 cab 并放置文件
如果你拿到的是纯 cab 包,没有安装引导,可以用expand命令手动解压。Windows 自带这个工具,在命令提示符里就能用。
# 创建目标目录 mkdir C:\Visio2007_Manual\VisPro mkdir C:\Visio2007_Manual\VisioLR # 展开 Visio 主程序 cab 到指定目录 expand -F:* D:\Visio2007_32_64\VisProWW.cab C:\Visio2007_Manual\VisPro # 展开语言资源 expand -F:* D:\Visio2007_32_64\VisioLR.cab C:\Visio2007_Manual\VisioLR # 如果是 64 位系统,继续展开共享组件 expand -F:* D:\Visio2007_32_64\OWOW64WW.cab C:\Visio2007_Manual\OWOW64 expand -F:* D:\Visio2007_32_64\OWOW64LR.cab C:\Visio2007_Manual\OWOW64LRexpand的-F:*表示展开 cab 内所有文件,后面跟源 cab 路径和目标目录。执行完之后,VisPro目录里会出现VISIO.EXE以及大量.dll、.vsl形状库文件。这时候直接双击VISIO.EXE通常能启动,但可能会提示缺少某些共享组件或语言资源。我一般会把VisioLR和OfficeLR展开后的内容合并到主程序目录下的1033或对应语言文件夹里,具体文件夹名取决于你的界面语言版本。
注意:手动展开只适合临时使用或隔离环境。如果要做长期稳定运行,建议还是找完整的安装引导程序,让安装程序去注册组件和写注册表。手动展开的版本在导出 PDF、调用 VBA 宏时可能因为缺少注册信息而失败。
3. 安装后的关键配置:模板库、数据链接与 VBA 宏启用
3.1 模板和形状库的加载路径
Visio 2007 启动后,如果发现“新建”菜单里模板很少,或者拖出来的形状显示为空白方块,多半是形状库路径没对上。默认情况下,Visio 会从安装目录下的Solutions文件夹和用户配置目录里找模板。手动展开的版本需要手动指定路径。
# 查看 Visio 默认模板搜索路径(在 Visio 里操作) # 文件 -> 选项 -> 高级 -> 文件位置 # 或者直接看注册表: # HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Visio\Application # 找到 "StencilPath" 和 "TemplatePath" # 如果手动展开,可以把 Solutions 目录复制到用户目录下 xcopy /E /I C:\Visio2007_Manual\VisPro\Solutions "%USERPROFILE%\Documents\Visio\Solutions"把Solutions目录复制到用户文档目录下,Visio 启动时会自动扫描这个位置。/E表示复制所有子目录包括空目录,/I表示如果目标不存在就当作目录创建。复制完之后重启 Visio,新建菜单里应该能看到“流程图”“组织结构图”“网络图”等分类。如果还是没有,检查一下Solutions下面是否有1033这样的语言子目录,没有的话需要从VisioLR.cab里把对应语言资源展开进去。
3.2 数据链接功能的配置
Visio 2007 的数据链接可以把 Excel 表格里的数据导入到图形属性里,比如组织结构图里每个人的姓名、职位、部门直接从 Excel 读,改数据后图形自动更新。这个功能依赖Data Connectivity组件,手动展开时容易漏掉。
# 确认数据链接相关文件是否存在 dir C:\Visio2007_Manual\VisPro\*dat*.dll dir C:\Visio2007_Manual\VisPro\*conn*.dll # 如果缺失,从 OfficeLR.cab 里找 expand -F:* D:\Visio2007_32_64\OfficeLR.cab C:\Visio2007_Manual\OfficeLR # 然后把相关 dll 复制到 VisPro 目录 copy C:\Visio2007_Manual\OfficeLR\*dat*.dll C:\Visio2007_Manual\VisPro\数据链接的配置入口在 Visio 菜单的“数据”选项卡下,选“将数据链接到形状”。如果这个菜单是灰的,说明组件没注册。手动展开的版本没法自动注册,需要用regsvr32手动注册关键 dll。
# 以管理员身份运行命令提示符,注册数据链接组件 regsvr32 C:\Visio2007_Manual\VisPro\msdatlks.dll regsvr32 C:\Visio2007_Manual\VisPro\msdatsrc.dllregsvr32执行成功会弹一个确认框。如果提示“找不到指定模块”或“加载失败”,检查文件路径是否正确,以及是否用了 32 位版本的 regsvr32(64 位系统上注册 32 位 dll 需要用C:\Windows\SysWOW64\regsvr32.exe)。
3.3 VBA 宏的启用与安全设置
Visio 2007 支持 VBA 宏编程,可以写脚本自动生成图形、批量修改属性、导出图表。但默认安全设置会禁用宏,需要手动调整信任中心。
# 在 Visio 里操作:工具 -> 宏 -> 安全性 # 把安全级别设为“中”或“低” # 或者直接改注册表(不推荐,容易引入风险) # HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Visio\Security # 新建 DWORD 值 "VBAWarnings",设为 1 表示启用所有宏我一般建议设成“中”,这样打开带宏的文件时会弹提示,确认后再运行。设成“低”虽然省事,但万一打开来源不明的 vsd 文件,宏可能直接执行。VBA 编辑器入口在“工具 -> 宏 -> Visual Basic 编辑器”,打开后可以写类似下面的代码批量导出当前页为 PNG。
' Visio VBA 示例:将当前页导出为 PNG Sub ExportCurrentPageAsPNG() Dim exportPath As String exportPath = "C:\Temp\VisioExport\page1.png" ' 确保目录存在 If Dir("C:\Temp\VisioExport\", vbDirectory) = "" Then MkDir "C:\Temp\VisioExport" End If ' 导出当前页 ActivePage.Export exportPath, "PNG" MsgBox "导出完成:" & exportPath End Sub这段宏的逻辑很简单:先检查导出目录是否存在,不存在就创建,然后调用ActivePage.Export方法把当前页按 PNG 格式导出。Export方法的第二个参数是格式字符串,Visio 2007 支持PNG、JPG、GIF、EMF等。如果你要批量导出所有页,把ActivePage换成Pages循环遍历即可。注意宏里写死的路径最好改成从对话框获取,避免换机器后路径不存在。
4. 避坑与排查:安装和运行中最容易翻车的五个点
4.1 现象:安装到一半提示“无法复制 VisProWW.cab”
原因通常是源 cab 文件损坏,或者 32 位和 64 位 cab 混在同一个目录里导致安装程序选错了文件。解决方法是先校验 cab 完整性,用expand单独测试每个 cab 能否正常展开。
# 逐个测试 cab 是否可读 expand -D D:\Visio2007_32_64\VisProWW.cab expand -D D:\Visio2007_32_64\VisioLR.cab expand -D D:\Visio2007_32_64\OWOW64WW.cab-D参数只列出 cab 内文件清单,不实际展开。如果某个 cab 报错,说明文件损坏,需要重新获取。如果都能列出,那就把 32 位和 64 位文件分到不同目录,安装时只指向目标架构对应的目录。
4.2 现象:Visio 启动后菜单是英文,但系统是中文
原因是语言资源 cab 没有正确展开或路径不对。VisioLR.cab和OfficeLR.cab里包含多语言资源,展开后需要放到主程序目录下的对应语言文件夹里。常见做法是建一个1033文件夹放英文资源,2052放简体中文资源。
# 查看语言资源 cab 里的目录结构 expand -D D:\Visio2007_32_64\VisioLR.cab | findstr /I "2052 1033" # 如果 2052 存在,展开到主程序目录下的 2052 文件夹 mkdir C:\Visio2007_Manual\VisPro\2052 expand -F:* D:\Visio2007_32_64\VisioLR.cab C:\Visio2007_Manual\VisPro\2052如果VisioLR.cab里没有 2052 目录,说明这个包只带了英文资源,中文界面需要另外找语言包。这种情况下要么接受英文界面,要么去匹配对应语言版本的资源 cab。
4.3 现象:画图时拖入形状后显示为空白或红叉
原因通常是形状库文件(.vss或.vsx)没有正确注册,或者路径里有中文或特殊字符导致 Visio 找不到。解决方法是把形状库文件放到纯英文路径下,并在 Visio 里手动添加搜索路径。
# 检查形状库文件是否存在 dir C:\Visio2007_Manual\VisPro\Solutions\*\*.vss # 如果路径里有中文,复制到英文路径 xcopy /E /I C:\Visio2007_Manual\VisPro\Solutions C:\VisioStencils\Solutions然后在 Visio 里点“文件 -> 形状 -> 我的形状 -> 打开模具”,手动指向C:\VisioStencils\Solutions下的具体.vss文件。打开一次后,Visio 会记住这个路径,下次就能在“我的形状”里直接看到。
4.4 现象:导出 PDF 时提示“找不到打印机”或导出空白
Visio 2007 导出 PDF 依赖系统里有一个可用的打印机驱动,哪怕是虚拟打印机。如果系统里没有任何打印机,导出 PDF 会失败。解决方法是先安装一个虚拟打印机,或者用“另存为”方式导出为 XPS 再转 PDF。
# 检查系统打印机列表 wmic printer get name # 如果没有打印机,添加一个 Microsoft Print to PDF(Win10 及以上自带) # 控制面板 -> 设备和打印机 -> 添加打印机 -> Microsoft Print to PDF如果系统是 Windows 7 或更早版本,没有 Microsoft Print to PDF,可以装一个开源的 PDF 打印机驱动,或者直接用 Visio 的“另存为”选 PDF 格式(部分版本支持)。导出空白通常是页面尺寸设置问题,检查“页面设置”里的纸张大小和方向是否和内容匹配。
4.5 现象:VBA 宏运行到一半报“对象变量未设置”
原因是宏里引用了不存在的对象,比如ActivePage在没有任何文档打开时就是空。解决方法是加错误处理和对象检查。
' 改进版:加错误处理和对象检查 Sub SafeExport() On Error GoTo ErrHandler If ActiveDocument Is Nothing Then MsgBox "没有打开的文档" Exit Sub End If If ActivePage Is Nothing Then MsgBox "没有活动页面" Exit Sub End If Dim exportPath As String exportPath = "C:\Temp\VisioExport\page_" & ActivePage.Name & ".png" ActivePage.Export exportPath, "PNG" MsgBox "导出成功" Exit Sub ErrHandler: MsgBox "导出失败:" & Err.Description End Sub这段代码在导出前先检查ActiveDocument和ActivePage是否为空,避免直接调用方法时报错。On Error GoTo ErrHandler是 VBA 里最基本的错误捕获结构,配合Err.Description能拿到具体错误信息。如果你经常写宏,建议把这类检查封装成函数,每个宏开头都调一次。
5. 进阶技巧:用 VBA 批量生成流程图并导出为 PDF
5.1 从 Excel 数据批量生成流程节点
Visio 2007 的 VBA 接口可以读取 Excel 里的流程步骤,自动在 Visio 页面上生成矩形节点和连接线。这个用法在需要把业务流程文档快速转成图的时候特别省事。下面是一个可复现的示例,假设 Excel 里有两列:A 列是步骤名称,B 列是下一步骤名称。
' 从 Excel 读取流程数据并在 Visio 中生成节点和连接线 Sub GenerateFlowFromExcel() Dim xlApp As Object Dim xlSheet As Object Dim visPage As Visio.Page Dim shpFrom As Visio.Shape Dim shpTo As Visio.Shape Dim i As Integer Dim lastRow As Integer Dim stepName As String Dim nextStep As String Dim shapeMap As Object ' 创建字典用于按名称查找形状 Set shapeMap = CreateObject("Scripting.Dictionary") ' 连接 Excel Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False Set xlSheet = xlApp.Workbooks.Open("C:\Temp\flow_data.xlsx").Sheets(1) ' 获取最后一行 lastRow = xlSheet.Cells(xlSheet.Rows.Count, 1).End(-4162).Row ' xlUp = -4162 Set visPage = ActivePage ' 第一遍:创建所有节点 For i = 2 To lastRow ' 假设第一行是标题 stepName = xlSheet.Cells(i, 1).Value If stepName <> "" And Not shapeMap.Exists(stepName) Then Dim shp As Visio.Shape Set shp = visPage.Drop(Application.Documents("BASIC_U.VSS").Masters.ItemU("Rectangle"), _ i * 2, 5) shp.Text = stepName shapeMap.Add stepName, shp End If Next i ' 第二遍:创建连接线 For i = 2 To lastRow stepName = xlSheet.Cells(i, 1).Value nextStep = xlSheet.Cells(i, 2).Value If stepName <> "" And nextStep <> "" Then If shapeMap.Exists(stepName) And shapeMap.Exists(nextStep) Then Dim connector As Visio.Shape Set connector = visPage.Drop(Application.ConnectorToolDataObject, 0, 0) connector.CellsU("BeginX").GlueTo shapeMap(stepName).CellsU("PinX") connector.CellsU("EndX").GlueTo shapeMap(nextStep).CellsU("PinX") End If End If Next i ' 清理 xlApp.Workbooks.Close xlApp.Quit Set xlApp = Nothing Set xlSheet = Nothing MsgBox "流程生成完成,共 " & shapeMap.Count & " 个节点" End Sub这段宏的逻辑分两遍:第一遍遍历 Excel 行,按步骤名称创建矩形形状,并用字典记录名称到形状对象的映射;第二遍再遍历一次,根据“下一步骤”列找到对应的两个形状,用连接线工具把它们连起来。visPage.Drop方法把模具里的主形状放到页面上,参数是模具对象、X 坐标、Y 坐标。Application.ConnectorToolDataObject是 Visio 内置的连接线对象,直接 Drop 出来再用GlueTo粘到形状的PinX单元格上,就能自动路由。
参数方面,i * 2是控制节点横向间距,5是纵向位置,你可以按页面大小调整。BASIC_U.VSS是基础形状模具,如果这个模具没加载,需要先Application.Documents.OpenEx "BASIC_U.VSS", visOpenRO打开。Excel 文件路径写死在代码里,实际用的时候改成从对话框选或者从配置文件读。
5.2 批量导出所有页为 PDF 并合并
Visio 2007 本身不支持直接把多页导出成一个 PDF,但可以用 VBA 逐页导出为 PDF,再用外部工具合并。或者逐页导出为 EMF,插入 Word 后再由 Word 导出 PDF。我一般用前者,因为可控性强。
' 批量导出所有页为单独 PDF Sub ExportAllPagesToPDF() Dim page As Visio.Page Dim exportDir As String Dim fileName As String exportDir = "C:\Temp\VisioPDF\" If Dir(exportDir, vbDirectory) = "" Then MkDir exportDir End If For Each page In ActiveDocument.Pages fileName = exportDir & "page_" & page.Name & ".pdf" page.Export fileName, "PDF" Next page MsgBox "共导出 " & ActiveDocument.Pages.Count & " 页" End Subpage.Export的第二个参数写"PDF"时,Visio 会调用内置的 PDF 导出引擎。如果报错,检查是否装了 PDF 导出插件或者系统打印机是否可用。导出后的多个 PDF 可以用pdftk或类似工具合并:
# 用 pdftk 合并多个 PDF(需要先安装 pdftk) pdftk C:\Temp\VisioPDF\page_*.pdf cat output C:\Temp\VisioPDF\merged.pdfpdftk的cat命令按文件名顺序合并,output指定输出文件。如果页面顺序有要求,把page_*.pdf换成按页码排序的显式列表。
5.3 一个我踩过的坑:导出 PDF 时中文字体丢失
有一次导出的 PDF 里中文全部变成方框,排查了半天发现是 Visio 导出 PDF 时用的字体映射表里没有中文字体。解决方法是把 Visio 页面里的字体改成系统里已安装的中文字体,比如宋体或微软雅黑,并且在导出前确认“页面设置”里的“打印”选项没有勾选“使用打印机字体”。
# 查看系统已安装字体 dir C:\Windows\Fonts\*.ttf | findstr /I "sim sun hei" # 如果缺少中文字体,从其他机器复制或安装 copy D:\Fonts\simsun.ttc C:\Windows\Fonts\从那以后我每次做批量导出前,都强制走一遍字体检查:先看页面里有没有用非系统字体,再看导出设置里有没有字体替换选项。这个习惯帮我省了不少返工时间。希望帮到你。
本文还有配套的精品资源,点击获取