搜索
查看: 926|回复: 5

请帮忙解决:已隐藏的Excel文件被连带显示出来的问题

[复制链接]

12

主题

38

帖子

236

积分

新手入门

积分
236
发表于 2018-6-11 13:13:06 | 显示全部楼层 |阅读模式
  1. import winex;
  2. import win.ui;
  3. import fsys.dlg;
  4. import com.excel;
  5. /*DSG{{*/
  6. var winform = win.form(text="aardio form";right=396;bottom=146;parent=...)
  7. winform.add(
  8. button={cls="button";text="打开Excel文件";left=87;top=38;right=311;bottom=95;z=1}
  9. )
  10. /*}}*/

  11. var excel, book, sheet = null, null, null;
  12. winform.button.oncommand = function(id,event){
  13.     if ("关闭Excel文件" == winform.button.text) {
  14.         winform.button.text = "打开Excel文件";
  15.             book.save(); book.close();
  16.             excel.Quit();
  17.            
  18.             sheet = null; book = null; excel = null;//释放所有对excel对象的引用
  19.                 collectgarbage("collect");//内存回收,确保excel完全退出
  20.             return;
  21.     }
  22.    
  23.         var file_path = fsys.dlg.open("Excel文件|*.xls;*xlsx|",,,winform.hwnd);
  24.         if (null == file_path) {
  25.                 return;
  26.         }
  27.    
  28.         excel = com.excel(true);
  29.         if (!excel) error ("Excel未正确安装!");
  30.        
  31.         excel.Visible = false;                                                                                                                                // Excel窗口不可见

  32.         book = excel.WorkBooks.open(file_path);
  33.        
  34.         sheet = book.Worksheets(1);
  35.         sheet.Cells(1,1).Value2 = tostring(time(, "%Y%m%d%H%M%S"));
  36.         sheet.Range("A1").HorizontalAlignment         = -4108/*_xlCenter*/; sheet.Columns(1).ColumnWidth = 48;
  37.        
  38.         winform.button.text = "关闭Excel文件";
  39. }

  40. winform.enableDpiScaling();
  41. winform.show();

  42. win.loopMessage();
  43. return winform;
复制代码
   测试环境:32位 WIN7 SP1,WPS软件
    在该代码中,先打开一个A.xls文件,并隐藏后进行操作。A.xls未关闭的情况下,在系统中打开B.xls文件,B.xls文件被显示出来的同时,连带A.xls也被显示出来了;若此时点击"关闭Excel文件"按钮,会导致A.xls和B.xls两个文件同时被关闭。
    查看任务管理器,在打开了一个A.xls文件时,任务管理器中生成了一个et.exe的进程,然后在系统中打开B.xls文件,任务管理中会立即生成另外一个et.exe的进程,然后这个新et.exe关闭,紧接着系统界面同时显示出A.xls和B.xls文件。
    问题1:代码中A.xls文件是被隐藏起来后进行操作,此时系统打开B.xls文件使得A.xls文件被显示出来,如何避免或解决?
    问题2:如果问题1不能避免,是否有办法使打开A.xls文件时生成的et.exe进程被独占或被隐藏?

回复

使用道具 举报

10

主题

82

帖子

666

积分

三级会员

Rank: 4

积分
666
发表于 2018-6-11 13:25:26 | 显示全部楼层
A.XLS和B.XLS是两个子窗口,你关闭对应的子窗口就好了。
  1. import console;
  2. import win;
  3. import winex;

  4. winex.enum(
  5.         function(hwnd,depth){
  6.                 //隐藏A.xls窗口
  7.                 win.show(hwnd/*窗口*/,0x0/*_SW_HIDE*/)                       
  8.                 sleep(20000);
  9.                 //还原显示
  10.                 win.show(hwnd/*窗口*/,0x1/*_SW_NORMAL*/);       
  11.         }
  12.         ,
  13.         ,"EXCEL"
  14.         ,"A.xls"
  15. )

  16. console.pause(true);
复制代码
回复

使用道具 举报

12

主题

38

帖子

236

积分

新手入门

积分
236
 楼主| 发表于 2018-6-11 14:05:33 | 显示全部楼层
alajia 发表于 2018-6-11 13:25
A.XLS和B.XLS是两个子窗口,你关闭对应的子窗口就好了。

谢谢,刚才已经测试这个方法了。现象是一样的,当打开新的Excel文件时,被隐藏的文件仍然连带被显示出来
回复

使用道具 举报

10

主题

82

帖子

666

积分

三级会员

Rank: 4

积分
666
发表于 2018-6-11 14:14:46 | 显示全部楼层
本帖最后由 alajia 于 2018-6-11 14:17 编辑

你确认隐藏成功了,然后打开其他文件时才又显示?
  1. import console;
  2. import win;
  3. import winex;

  4. winex.enum(
  5.         function(hwnd,depth){
  6.                 //隐藏A.xls窗口
  7.                 win.show(hwnd/*窗口*/,0x0/*_SW_HIDE*/) ;                  
  8.         }
  9.         ,
  10.         ,"EXCEL"
  11.         ,"A.xls"
  12. )

  13. console.pause(true);
复制代码
回复

使用道具 举报

12

主题

38

帖子

236

积分

新手入门

积分
236
 楼主| 发表于 2018-6-11 15:15:51 | 显示全部楼层
alajia 发表于 2018-6-11 14:14
你确认隐藏成功了,然后打开其他文件时才又显示?

我是这样测试的:
    先新建了一个A.xls的Excel文件,然后系统打开A.xls,然后运行您给的这个代码,运行后A.xls文件并没有隐藏。
    然后,我用窗口探测器(winspy)工具,获取了A.xls的窗口句柄号,直接win.show(hwnd, 0x0),可以看到A.xls文件已经隐藏,然后我再打开另外一个B.xls文件,此时A.xls、B.xls文件都可以看到。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-6-11 15:35:53 | 显示全部楼层
你的进程窗口、显示、隐藏都是WPS内部的行为,
这种问题你应该去查阅WPS文档,而不是从 aardio 这里找答案。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-11 19:52 , Processed in 0.078134 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表