Octave:写入单元格时,Excel 的 COM 接口太慢。有什么办法可以加快速度吗

问题描述 投票:0回答:1

我正在尝试结合 EXCEL 进行实验室数据管理,并结合 Octave 进行处理。 它涉及调用 Excel、读取和写入单元格。

但由于某种原因,写入单元格的速度非常慢。这需要几个小时,而从 VBA 执行相同的操作或读取/写入文件则需要几毫秒。

有没有办法加快速度? 就像一步将完整数组写入一列一样? COM 更可取,因为可以访问 Excel 对象,并且可以本地编辑电子表格。

pkg load windows;
Excel = actxserver('Excel.Application');
xls = Excel.Workbooks.Open('D:/MISC/noise.xlsx');
disp "opened the book"
data=[];
sheet=xls.Sheets("MYDATA");
for i = 7:8007
  data(i-6)= sheet.Cells(i,6).value2;
endfor
disp "scanned the cells to data"
transfer=fir1(128,0.001);
delay=mean(grpdelay(transfer));
results=fftfilt(transfer,data,128);
results(1:delay)=[];
results(end+1:end+delay)=results(end);
disp "calculated the filtered results"

for i = 1:8001
  sheet.Cells(i+6,7).value=data(i);
    if or(mod(i,10)==0, i == 80001)
      printf("\rwriting cells %i%%   ", floor(100*i/8001))
    endif
endfor
disp "cells are written"

xls.Save
disp "saved"
xls.Close(false);
disp "closed"
Excel.Quit();
disp "Quited"
com_delete(sheet);
com_delete(xls);
com_delete(Excel);
pkg unload windows
disp "unloaded"
excel windows com octave excel-interop
1个回答
0
投票

不知道为什么写调用比读调用慢很多倍。但我发现为什么书写范围给出了错误的结果。

问题出在数组格式上。 Octave 在调用 Excel 时遵循尺寸。因此,向量作为一行发送,并且应该转置以写入一列。当没有下一行时,前一行(其第一个成员)将重复到最后。不确定是谁做的,Octave 还是 Excel。

说到打电话写东西极其慢,我还不知道原因

© www.soinside.com 2019 - 2024. All rights reserved.