同事小岳有时候需要统计Visio文档的页数,有一次她问我有没有快速统计Visio文档页数的方法。于是就写了一个Visio页数统计小工具,它可以遍历给定目录及其下的所有子目录,把每个Visio文档及其页数显示出来。如下图所示:
代码如下:
Public Class CountVsdForm ''' 统计Visio页数 Private Sub CountVsd() Dim messageContnet = getFileNames() Dim filedir As String = "" If (messageContnet <> "") Then MsgBox(messageContnet) filePath.Text = "" filePath.Focus() Exit Sub End If Dim appvisio As Microsoft.Office.Interop.Visio.Application = New Microsoft.Office.Interop.Visio.ApplicationClass() DataGridView1.AutoResizeColumns() For Each row As DataGridViewRow In DataGridView1.Rows Dim Pages As Long = 0 Dim Sheets As Long = 0 Dim dms As Microsoft.Office.Interop.Visio.Documents = appvisio.Documents filedir = row.Cells("CL_File").Value If filedir = DBNull.Value.ToString() Or "".Equals(filedir) Then Continue For End If Dim dm As Microsoft.Office.Interop.Visio.Document = dms.Open(filedir) For Each page As Microsoft.Office.Interop.Visio.Page In dm.Pages Sheets += 1 Pages += page.PrintTileCount Next '关闭打开的文件 dm.Close() row.Cells("CL_Pages").Value = Pages row.Cells("CL_Sheets").Value = Sheets Next '退出Visio应用程序 appvisio.Quit() End Sub ''' 统计 Private Sub count_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles count.Click CountVsd() End Sub ''' 根据给定的文件路径,遍历所有目录,找出所有vsd文件,填充到DataGridView中。 Private Function getFileNames() As String Dim arr() As String Dim i As Integer Dim j As Integer = 1 Dim rowvsd As DataGridViewRow Dim rowIndex As Integer '没有找到vsd文件 If "".Equals(filePath.Text) Then getFileNames = "文件路径不能为空!" Exit Function End If '遍历所有目录,找出所有vsd文件 treeSearch(filePath.Text, "*.vsd", arr) '没有找到vsd文件 If arr Is Nothing Then getFileNames = "Visio文件不存在,请重新输入文件路径!" Exit Function End If '填充DataGridView For i = LBound(arr) To UBound(arr) If arr(i) = DBNull.Value.ToString Then Continue For End If rowIndex = DataGridView1.Rows.Add() rowvsd = DataGridView1.Rows(rowIndex) rowvsd.Cells("CL_Num").Value = CStr(j) rowvsd.Cells("CL_File").Value = arr(i).Replace("", "") j = j + 1 Next getFileNames = "" End Function ''' 遍历所有目录,找出所有vsd文件 Private Function treeSearch(ByVal sPath As String, ByVal sFileSpec As String, ByRef sFiles() As String) As Long On Error Resume Next Static Files As Long '文件数目 Dim sDir As String Dim sSubDirs() As String '存放子目录名称 Dim Index As Long = 0 If Mid(sPath, sPath.Length - 1) <> "" Then sPath = sPath & "" sDir = Dir(sPath & sFileSpec) '获得当前目录下文件名和数目 Do While Len(sDir) Files = Files + 1 ReDim Preserve sFiles(0 To Files) sFiles(Files) = sPath & sDir sDir = Dir() Loop '获得当前目录下的子目录名称 sDir = Dir(sPath & "*.*", 16) Do While Len(sDir) If Mid(sDir, 1, 1) <> "." Then 'skip.and.. '找出子目录名 If GetAttr(sPath & sDir) And vbDirectory Then Index = Index + 1 '保存子目录名 ReDim Preserve sSubDirs(0 To Index) sSubDirs(Index) = String.Format("{0}{1}", sPath, sDir) End If End If sDir = Dir() Loop For Index = 1 To Index '查找每一个子目录下文件,这里利用了递归 Call treeSearch(sSubDirs(Index), sFileSpec, sFiles) Next Index treeSearch = Files End Function Private Sub clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clear.Click filePath.Text = "" DataGridView1.Rows.Clear() filePath.Focus() End Sub End Class
Visio页数统计工具.rar,下载地址:
http://pan.baidu.com/s/1o6Fjpvs
Visio页数统计工具源码工程,下载地址:
http://ishare.iask.sina.com.cn/f/33688674.html
这样的功能很强大的!
不懂 没接触过
学习了.