1

Тема: AHK: запуск файла excel через run и чтение из него данных

Здравствуйте! Я пришла просить помощи, у мудрых и знающих программистов, т.к. сама - глупая женщина, которая не может дать ладу в, как мне поначалу казалось, простом деле.
Что требуется:
1. Запустить файл Excel через run. -- Это у меня получилось
2. Считать данные из ячеек в этом файле. -- а вот тут все, кранты. Никак не пойму как обратиться к данным.

Подскажите, как это делается или ссылочкой полезной поделитесь, буду премного благодарна.

2 (изменено: svoboden, 2017-10-13 03:36:17)

Re: AHK: запуск файла excel через run и чтение из него данных

Через com, конечно.

1::
xl := ComObjActive("Excel.Application")

a := []
loop, 57
{
	MyIndex := A_Index
	a.push(xl.Range("A" A_Index).value)
}

msgbox % a[1]
return

А так можно открыть/закрывать Excel или файл.

filepath := ("C:\Книга1.xlsx")

2::
objExcel := ComObjCreate("Excel.Application")
objExcel.Workbooks.Open(filepath)
return

3::
objExcel := ComObjGet(filepath)
objExcel.close
return

Правда, в диспетчере может оставаться висеть Excel.

3

Re: AHK: запуск файла excel через run и чтение из него данных

svoboden пишет:

objExcel.close

А откуда вы такой метод взяли?

4

Re: AHK: запуск файла excel через run и чтение из него данных

Malcev пишет:

А откуда вы такой метод взяли?

https://autohotkey.com/boards/viewtopic … +ComObjGet

5

Re: AHK: запуск файла excel через run и чтение из него данных

У меня в диспетчере задач excel не остаётся если в первую часть кода добавить objExcel.Quit().

6

Re: AHK: запуск файла excel через run и чтение из него данных

svoboden
Спасибо вам за ответ!
К сожалению, ничего не выходит. Если пытаюсь открыть файл, с помощью команды run, то прога ругается на:

svoboden пишет:

xl := ComObjActive("Excel.Application")

Может дело в том, я не могу их связать, не знаю.

Открытие файла через path мне не подходит, по причине того что файл Excel, который я пытаюсь открыть запустить, не простой Он содержит в себе код, который при открытии данного файла, посылает запрос данных на сервер. Считывает их и перезаписывает ячейки со старыми данными на полученные новые. Если я запускаю файл через path, то он просто открывается, а запроса к серверу не происходит.
А вот если использовать команду run, то файл запускается и запрос с обновлением выполняются. А дальше все...ничего не пойму.

7 (изменено: stealzy, 2017-10-13 15:43:27)

Re: AHK: запуск файла excel через run и чтение из него данных

objExcel.Calculate ; думаю, из названия метода все понятно (мной не испытывалось)

8 (изменено: svoboden, 2017-10-15 18:32:24)

Re: AHK: запуск файла excel через run и чтение из него данных

st-shony пишет:

Может дело в том, что я не могу их связать, не знаю.

Скорее всего, т.к, что там непонятного? Так, например, считывает 20 ячеек колонки "А", можно считать больше.


1::
xl := ComObjActive("Excel.Application")

a := []
loop, 20
{
	MyIndex := A_Index
	a.push(xl.Range("A" A_Index).value) ; тут меняется колонка по умолчанию стоит "А"
    d .= a[A_Index]"`n"
}

msgbox % d
d := ""
return

По поводу, что открытия файла через path не подходит. Я думаю, что все там работает, просто надо перед закрытием файла его сохранить, когда файл обновит данные, как это делается, я показал по ссылке выше.

9

Re: AHK: запуск файла excel через run и чтение из него данных

И при objExcel.close тоже не остается. При выходе из скрипта, Excel закрывается.

10

Re: AHK: запуск файла excel через run и чтение из него данных

В первом вашем случае такого метода нету:

objExcel := ComObjCreate("Excel.Application")
objExcel.close

А для чего вам нужна эта переменная MyIndex := A_Index ?
И зачем вы используете массивы, если всё-равно потом в переменную d записываете?

11

Re: AHK: запуск файла excel через run и чтение из него данных

Malcev я думал, про переменные stealzy спросит. Я просто сказал, что метод objExcel.close тоже закрывает Excel.

12 (изменено: Malcev, 2017-10-13 23:55:15)

Re: AHK: запуск файла excel через run и чтение из него данных

Я имею в виду не то, что у вас в коде нету, а то, что такого метода в принципе нету у Application object.
https://msdn.microsoft.com/en-us/vba/ex … ject-excel
А при чем тут stealzy?
Просто лишние действия в коде и прочий мусор (типа неиспользуемых переменных) только усложняют его понимание.

13 (изменено: svoboden, 2017-10-14 00:07:35)

Re: AHK: запуск файла excel через run и чтение из него данных

Как причем? Ко всему придирается, а нормально ответить сам не может.

Хорошо, тогда скажите, зачем здесь нужны переменные? А насчет методов, то я их не ищу в msdn.

14

Re: AHK: запуск файла excel через run и чтение из него данных

svoboden пишет:

зачем здесь нужны переменные?

Ну а как там без них?
У вас есть предложения?

15 (изменено: svoboden, 2017-10-14 00:26:30)

Re: AHK: запуск файла excel через run и чтение из него данных

Какие еще предложения? http://s2.rimg.info/5602a4cac8909fc6c1ce0e23fa5bdb6d.gif. Просто я не могу понять, зачем они там нужны, и без них тоже все работает?

16

Re: AHK: запуск файла excel через run и чтение из него данных

Приведите пример, как без них всё будет работать.
У вас все будет работать так:

1::
xl := ComObjActive("Excel.Application")
d := ""
loop, 20
   d .= xl.Range("A" A_Index).value "`n"
msgbox % d

17 (изменено: svoboden, 2017-10-14 03:42:39)

Re: AHK: запуск файла excel через run и чтение из него данных

А вы говорили про усложнения понимания кода, а не про работает - не работает.

18 (изменено: Malcev, 2017-10-14 01:12:22)

Re: AHK: запуск файла excel через run и чтение из него данных

Я имел в виду, что для работоспособности вашего кода переменная MyIndex не нужна, так как нигде не используется.
И массивы тоже излишни, так как вы все складываете в одну переменную.
В моем же коде все переменные используются и без них мой код работать не будет.
Разницу улавливаете?
Если у вас есть предложения по его модернизации, то я только за.

19 (изменено: svoboden, 2017-10-15 18:32:42)

Re: AHK: запуск файла excel через run и чтение из него данных

Как они используются? Их можно удалить, и все равно все работает, соответственно, зачем они там надо?

20

Re: AHK: запуск файла excel через run и чтение из него данных

Я вас не понимаю.
Если вы имеете в виду приравнивание переменных к нулю, то это я сделал дабы избежать таких моментов:

str1 = 68376123454132178
str2 = 12

Prev := "", n := MaxN := Sum := MaxSum := 0
Loop, Parse, str1
{
   if (A_LoopField -1 = Prev)
      Sum += A_LoopField, n++
   else
      Sum := A_LoopField, n := 1
   if (n > maxN)
      maxN := n, MaxSum := Sum
   Prev := A_LoopField
}
msgbox % MaxSum

;Prev := "", n := MaxN := Sum := MaxSum := 0
Loop, Parse, str2
{
   if (A_LoopField -1 = Prev)
      Sum += A_LoopField, n++
   else
      Sum := A_LoopField, n := 1
   if (n > maxN)
      maxN := n, MaxSum := Sum
   Prev := A_LoopField
}
msgbox % MaxSum

21 (изменено: st-shony, 2017-10-17 01:03:34)

Re: AHK: запуск файла excel через run и чтение из него данных

svoboden

svoboden пишет:

По поводу, что открытия файла через path не подходит. Я думаю, что все там работает, просто надо перед закрытием файла его сохранить, когда файл обновит данные, как это делается, я показал по ссылке выше.

Вы не поняли. Файл не обновляет данные, если он запускается посредством:


filepath := ("C:\Книга1.xlsx")
objExcel := ComObjCreate("Excel.Application")
objExcel.Workbooks.Open(filepath)

Он открывается со старыми данными и все.

22

Re: AHK: запуск файла excel через run и чтение из него данных

А так?

filepath := ("C:\Книга1.xlsx")
objExcel := ComObjCreate("Excel.Application")
WorkBook := objExcel.Workbooks.Open(filepath)
Workbook.RefreshAll

23

Re: AHK: запуск файла excel через run и чтение из него данных

Malcev
Тоже не работает.
Поэтому я и пытаюсь через run. Работает только он.

24

Re: AHK: запуск файла excel через run и чтение из него данных

st-shony, файл дайте. У Excel сотни методов, но какой из них отвечает за выполнение макроса при открытии...

25 (изменено: svoboden, Вчера 02:24:00)

Re: AHK: запуск файла excel через run и чтение из него данных

st-shony, если вам так нравится, то запускайте через Run, а данные из ячеек, сумели хоть считать.