ioripalm 发表于 2017-6-8 10:42:21

如何以只读方式ObjGet打开一个excel文件?

本帖最后由 ioripalm 于 2017-6-8 10:48 编辑

如何以只读方式ObjGet打开一个excel文件?
$lastSummaryXls = ObjGet(@ScriptDir & "\" & $lastMonth.Xls)
        If @error Then MsgBox(16, 1, "Error")
        With $lastSummaryXls.Worksheets("Summary")
                $EmpList = .cells(1, 1).resize(.UsedRange.Rows.Count , .UsedRange.Columns.Count).value
                $EmpList = $lastSummaryXls.parent.application.transpose($EmpList)
                ;_ArrayDisplay($EmpList)
                .parent.close(False)
        EndWith
以上代码经过测试如果打开的excel文件是受保护的,比如文件是网络下载的,或者是U盘里的,或者2010以上office版本打开97 office的xls文件,excel的默认安全选项会提示这个excel文件是受保护的,默认不可以修改(除非在office的选项-信任设置内将所有保护关闭)。
如果是使用excel手动打开这个文件,可以点击excel上方的protected view--edit anyway来解除保护(只需要设置一次,office会记住这个文件受信任)。再次使用au3读取excel就可以获取数据。
如果我通过ObjGet直接读取文件内容,就会返回@error
现在我想找个方法如何直接用au3的ObjGet来读取这个excel文件(只要读取数据),找了office的vbs帮助文档,所有的关于protect的方法都不适用。
请大家帮我看看怎么只读方式打开收保护的excel文件。


微软关于 受保护视图 的说明

chenxiaooo 发表于 2017-6-8 12:51:51

javascript:void(0);

kevinch 发表于 2017-6-10 21:32:10

保护方式打开是可以读取的,用workbooks.open(文件名,false,true)的方式打开,然后worksheets.copy复制全部工作表到新工作簿,关闭受保护的文件,新建的文件有完全的操作权限,编辑过后再保存为那个文件就可以了

xlj310 发表于 2017-6-11 12:50:56

直接以只读方式打开就行了。如果文件已经被打开了,也无妨的。

$filePath=@ScriptDir&"\受保护的Excel.xls"
$oExcel = ObjCreate("Excel.Application")
$oExcel.Visible = True
$oExcel.DisplayAlerts = False
$oExcel.WorkBooks.Open($filePath, 3, 1);以只读方式打开
页: [1]
查看完整版本: 如何以只读方式ObjGet打开一个excel文件?