测量Excel的加载时间

时间:2015-07-27 11:52:39

标签: java excel

我正在寻找超过一周的解决方案。也许你有一个很好的解决方案来解决这个问题:

我想测量用Excel打开Excel文件所需的时间。我的第一个解决方案是用这行代码开始测量:

ProcessBuilder command = new ProcessBuilder("cmd", "/c",
                        <EXCEL_PATH>,
                        <FILE-LOCATION>);
                command.start();
                long start = System.currentTimeMillis();

我通过进程资源管理器检查RAM-Usage。如果excel完成加载,ram的使用仍然是相同的,我停止测量。如你所见,这是非常模糊的,不是一个好的解决方案。

作为第二个解决方案,我在JAVA中打开一个SocketServer并等到Excel在完成加载文件后调用Workbook_Open() - Method。在这个方法中,我发送一个套接字连接到java服务器(我给主机和端口作为参数excel)并测量这个时间。

这非常有效但是在我的公司中,如果它们没有存储在受信任的区域中,则不允许自动运行脚本。我不能改变政策,所以它不是一个解决方案。有谁知道如何在Excel中测量Excel文件的加载时间?它们不能用于跟踪Excel中的加载时间吗?

1 个答案:

答案 0 :(得分:1)

更新回答:

您可以使用DDE重复尝试连接(启动对话)所需文件,并测量成功之前的时间。

请注意,它远非精确测量,应主要用于估算。

有关将DDE与Java和MS Excel一起使用的示例,请查看基于this projectthis one

详细信息:

在Excel程序内部完成加载之前,您无法通过DDE连接到Excel文件,这可以达到目的。
启动Excel后,您可以尝试通过DDE连接到该文件(重复或延迟100ms以避免CPU负载),直到成功为止,并计算成功后的时间。

伪代码:

ts = now(); 
d = DDE("file.xlsx"); 
while (d.error) { 
    d = DDE("file.xlsx"); 
} 
load_time = now() - ts;

<小时/> 旧版本的答案:如果您已经使用了工作簿的VBA,我认为这是一个简单的解决方案。

您可以在打开文件之前将当前时间写入一些新的临时本地文件,然后将Now子例程中的当前时间(Workbook_Open)写入同一临时文件,在第二行。

然后,您将能够跟踪文件,直到它有2行持续间隔,并计算时间戳之间的差异。