多人共用Excel的两种解决办法
单机软件实现企业应用文章导读
单机软件实现企业应用 配置Office服务器的五大常见问题
单机软件实现企业应用 配置Office服务器的两个妙方
单机软件实现企业应用 多人共用Excel的两种解决办法
单机软件实现企业应用 配置Office服务器的五大常见问题
单机软件实现企业应用 配置Office服务器的两个妙方
单机软件实现企业应用 多人共用Excel的两种解决办法
【IT168 专稿】在企业级应用中,一些用户经常会针对Office 文档的管理,开发一些自应用的Application,透过这些应用程序来对企业环境中的Office文档进行查看、编辑和管理。在开发的过程中,多用户对于文档的同时操作就成为一个必须要考虑的要点。
本文主要透过一个实际客户在开发中所遇到的多用户编辑控制文档的案例进行分析,提供几种在共享环境下控制Office文档并发操作的解决方案。
Office的工作机制及程序表征
任何Office 文档 (Excel, Word, etc.) 共享后,一旦一个用户去访问并打开该文档,另一个用户如果尝试去同时打开该文件,他就会收到一个对话框提示:当前是“read-only”状态,是否要打开副本。而一旦这个副本被打开,如果该用户选择保存,系统则又会弹出一个对话框:所有的更改都将保存在一个叫做“Copy of xxx”的新文档中。
实际应用中,代码的实现也应用了上述的机理:当我们应用VB6代码来打开文档的时候,在多用户的情况下,Runtime machine会调用代码来call Excel 文档,并且尝试对该文档进行修改时,当系统一旦发现该文档已经被另外一个用户所打开,VB系统就会处理这一冲突,并弹出一个“Switch To”的系统错误消息让操作者知道该文件实际上已经有了写冲突,如图1所示。此时,VB程序则会失去响应。

图1
Excel Share Workbook机制
基于上述信息,当我们需要检测是否是多用户同时操作的时候,可以使用Excel的“Share Workbook”功能。该功能可以让一个Excel文档设置为允许多个用户在网络环境中同时访问,并修改的模式。每一个用户可以将各自的修改保存在该文档中,同时也可以根据文档中数据颜色的不同来查看不同的用户对其所作的修改。如果两个用户同时对一个单元格进行修改,这时系统会弹出对话框进行冲突处理,用户可以根据提示选择保存。如图2所示:

图2
多人共用Excel 的两种解决办法
根据上述两种处理机制,笔者提供两种实现多人共用Excel的解决办法,以飨读者。
使用Excel Shared Workbook 功能
我们可以使用 Excel Shared Workbook 功能,将所要操作的文档设置成网络共享并可多人编辑的状态。这样多个用户即可在网络环境下同时操作该文档。用VB代码来实现的时候,同样可以正常运行。这种解决办法实现步骤如下:
1. 在Network Server机器上,打开所要操作的Excel文件;
2. 点击Tools>Share Workbook,在Editing Tab,勾选“Allow changes by more than one user at the same time….”;
3. 点击OK两次,然后关闭该文件;
4. 然后,可以测试如下的示例代码,当两个用户同时打开并修改该文档时,系统会正常运行。此时应注意:需要修改"strFilnavnBane = "\\UNCPatch" & "\" & strFilNavn"为自己所对应的网络路径。
Private Sub Form_Load()
Dim lngJaNei As Long
Dim mxl As Excel.Application
Dim wb As Excel.Workbook
Dim strVar As String
Dim strFilnavnBane As String
Dim strBane As String
Dim strFilNavn As String
strFilNavn = "Venteliste.xls"
strBane = CurDir
strFilnavnBane = "\\UNCPatch " & "\" & strFilNavn
Set mxl = CreateObject("Excel.application")
'mxl.Visible = True
strVar = Dir(strFilnavnBane)
If strVar = "" Then
MsgBox "Finner ikke ventelisten: " & strFilnavnBane
Exit Sub
End If
mxl.Workbooks.Open FileName:=strFilnavnBane ', UpdateLinks:=0, ReadOnly:=0, notify:=True
On Error Resume Next
mxl.Activate
mxl.ActiveWorkbook.Sheets(1).Range("A4") = 66
mxl.Workbooks(strFilNavn).Close True
MsgBox "Filen is closed"
Application.Quit
End
Exit Sub
End Sub
直接检测文档的打开属性
如果我们不希望使用Share Workbook 方式,还可以直接在用户使用代码调用Excel文档之前设置一个Checkpoint 来提前检测该文档是否已经被打开。但使用这种方式,需要注意:如果一个用户已经打开了所要操作的文档,代码就会自动为当前运行代码的用户打开一个副本文件。然后,会透过代码来检测该文档的Read-only Properties。如果返回值为真,则说明该文档已经被打开,则需要设定一个提示框,通知当前用户该文档已经被打开,用户可以做出选择来决定是否继续操作,或者关闭该副本文件;如果返回值为假,则没有任何提示,文档原件被自动打开,说明当前用户是唯一一位操作该文档的用户,即可正常使用该文档。这种解决办法实现步骤如下:
Private Sub Form_Load()
Dim lngJaNei As Long
Dim mxl As Excel.Application
Dim wb As Excel.Workbook
Dim strVar As String
Dim strFilnavnBane As String
Dim strBane As String
Dim strFilNavn As String
On Error GoTo Feil51
strFilNavn = "Venteliste.xls"
strBane = CurDir
strFilnavnBane = "\\UNCPatch" & "\" & strFilNavn
Set mxl = CreateObject("Excel.application")
mxl.Visible = True
strVar = Dir(strFilnavnBane)
If strVar = "" Then
MsgBox "Finner ikke ventelisten: " & strFilnavnBane
Exit Sub
End If
mxl.Workbooks.Open FileName:=strFilnavnBane ', UpdateLinks:=0, ReadOnly:=0, notify:=True
If mxl.Workbooks.Application.ActiveWorkbook.ReadOnly = True Then
GoTo Feil51
Else
On Error Resume Next
mxl.Activate
mxl.ActiveWorkbook.Sheets(1).Range("A4") = 66
MsgBox "Filen is open"
App.OleServerBusyRaiseError = True
End If
End
Exit Sub
Feil51:
lngJaNei = MsgBox("The file has been opened by another users, do you want to continue or close it? " , vbYesNo)
If lngJaNei = vbYes Then
On Error Resume Next
Else
mxl.Workbooks(strFilNavn).Close True
MsgBox "File is closed"
End If
End Sub
0
相关文章