Поскольку мне неоткуда почитать картинки из таблицы, набросал джоб, выводящий в файл 400 фрагментов экрана (image.captureScreen). Время работы 2-3 секунды.
X++:
static void Job98(Args _args)
{
ComExcelDocument_RU doc = new ComExcelDocument_RU();
Image image = new Image();
COM xlApp;
COM wbook;
COM activeSheet;
COM range;
int i, timeStart;
;
timeStart = timenow();
doc.NewFile('',false);
wbook = doc.getComDocument();
xlApp = wbook.Parent();
activeSheet = xlApp.ActiveSheet();
range = activeSheet.Range('B1');
xlApp.ScreenUpdating(false);
for (i=1;i<=400;i++)
{
image.captureScreen(0+(i-1)*2, 0+(i-1)*2, 300+(i-1)*2, 100+(i-1)*2);
image.clipboardCopy();
range.RowHeight(78);
//range.Select();
//activeSheet.Paste();
range.pasteSpecial(0);
range = range.Offset(1,0);
}
xlApp.ScreenUpdating(true);
doc.visible(true);
box::info(strFmt('Всего секунд: %1', timenow()-timeStart));
}
P.S. Удалось избавиться от Range.Select (см.коммент.строки), поэтому теоретически должно быть еще быстрее на какие-то проценты.
Опять в упор не понимаю, что означает конструкция pasteSpecial(0) применительно к Range (не к Worksheet!). Ну, нет там такой подпольной константы! По логике должна быть какая-то -4104 = xlPasteAll, но с ней валится.... А с 0 работает! Во дела... В каких же недокументированных анналах это прописано?
Что-то подобное мы уже обсуждали здесь:
Параметры pastespecial()