Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Запуск файлов и их сохранение

Ответить
Настройки темы
Запуск файлов и их сохранение

Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Суть в следующем. Есть папка с кучей файлов excel. Мне необходимо чтобы скрипт, находясь в папке на уровень выше, запустил все файлы excel в указанной папке, и просто их сохранил и закрыл. И так по порядку все файлы. Имена файлов произвольны и количество тоже. Спасибо.

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 23:28, 16-06-2010

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата Pozia:
чтобы он искал эксели во всех папках что находятся на одном уровне с самим скриптом, и вложенных в этих папках папки »
Код: Выделить весь код
#include <Array.au3>

$aExcel = _FileSearch(@ScriptDir, '*.xlsx', 1)
_ArrayDisplay($aExcel)


Func _FileSearch($sPath, $sFileMask = '*', $iFlag = 0, $iSubdir = 1)
    ;фильтры для поиска нужно указывать через ;
    ;$iFlag = 0 - Файлы и папки (по умолчанию)
    ;$iFlag = 1 - Только файлы
    ;$iFlag = 2 - Только папки
    ;$iSubdir = 1 - Искать во всех подкаталогах (по умолчанию). Возвращает полные пути.
    ;$iSubdir = 0 - Искать только в самой папке. Возвращает только имена файлов(папок).
    Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sSubdir, $aMasks

    If StringRight($sPath, 1) == '\' Then
        $sPath = StringTrimRight($sPath, 1)
    EndIf
    If $iSubdir Then
        $sSubdir = ' /S /B'
    Else
        $sSubdir = ' /B'
    EndIf
    Switch $iFlag
        Case 1
            $sAttrib = ' /A-D'
        Case 2
            $sAttrib = ' /AD'
        Case Else
            $sAttrib = ' /A'
    EndSwitch

    $sOut = StringToBinary('0' & @CRLF, 2)
    $aMasks = StringSplit($sFileMask, ';')

    For $i = 1 To $aMasks[0]
        $hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '"' & $sSubdir & $sAttrib, @SystemDir, @SW_HIDE, 6)
        While 1
            $sRead = StdoutRead($hDir, False, True)
            If @error Then
                ExitLoop
            EndIf
            If $sRead <> "" Then
                $sOut &= $sRead
            EndIf
            Sleep(2)
        WEnd
    Next
    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
    If @error Then
        Return SetError(1)
    EndIf
    $aOut[0] = UBound($aOut) - 1
    Return $aOut
EndFunc   ;==>_FileSearch
_FileSearch().
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:13, 05-04-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


madmasles, что то я не допру как этим добром пользоваться. Запустил, нашлись мои эксели. Выбрал. Нажал внизу кнопку. И ничего...

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 20:54, 05-04-2011 | #12


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата Pozia:
Запустил, нашлись мои эксели »
Выбирать ничего не надо. _ArrayDisplay($aExcel) только чтобы показать, что нашли. Можно его убрать вместе с #include <Array.au3> . Дальше, наверное, так, как у Вас раньше было:
Код: Выделить весь код
;...
If $aExcel[0] Then
    For $i = 1 To $aExcel[0]
        $sFile = $aExcel[$i]
        $oExcel = ObjCreate('Excel.Application'); Запускаем экземпляр Excel
        $oExcel.AskToUpdateLinks = False
        $oExcel.WorkBooks.Open($sFile); Открываем файл Excel'ем
        $oExcel.ActiveWorkBook.UpdateLinks; Обновляем ссылки
        $oExcel.ActiveWorkBook.Save; Сохраняем файл
        $oExcel.Application.Quit; Выходим из Excel
        $oExcel = 0; Освобождаем переменную
    Next
Else
    MsgBox(16, 'Error', 'Нет файлов')
EndIf
Попробуйте так, по идее, быстрее должно работать.
читать дальше »
Код: Выделить весь код
$aExcel = _FileSearch(@ScriptDir, '*.xlsx', 1)

If $aExcel[0] Then
    $oExcel = ObjCreate('Excel.Application'); Запускаем экземпляр Excel
    $oExcel.AskToUpdateLinks = False
    For $i = 1 To $aExcel[0]
        $oExcel.WorkBooks.Open($aExcel[$i]); Открываем файл Excel'ем
        $oExcel.ActiveWorkBook.UpdateLinks; Обновляем ссылки
        $oExcel.ActiveWorkBook.Save; Сохраняем файл
    Next
    $oExcel.Application.Quit; Выходим из Excel
    MsgBox(64, 'Info', 'Обработано ' & $aExcel[0] & ' файлов Excel')
Else
    MsgBox(16, 'Error', 'Нет файлов')
EndIf

Func _FileSearch($sPath, $sFileMask = '*', $iFlag = 0, $iSubdir = 1)
    ;фильтры для поиска нужно указывать через ;
    ;$iFlag = 0 - Файлы и папки (по умолчанию)
    ;$iFlag = 1 - Только файлы
    ;$iFlag = 2 - Только папки
    ;$iSubdir = 1 - Искать во всех подкаталогах (по умолчанию). Возвращает полные пути.
    ;$iSubdir = 0 - Искать только в самой папке. Возвращает только имена файлов(папок).
    Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sSubdir, $aMasks

    If StringRight($sPath, 1) == '\' Then
        $sPath = StringTrimRight($sPath, 1)
    EndIf
    If $iSubdir Then
        $sSubdir = ' /S /B'
    Else
        $sSubdir = ' /B'
    EndIf
    Switch $iFlag
        Case 1
            $sAttrib = ' /A-D'
        Case 2
            $sAttrib = ' /AD'
        Case Else
            $sAttrib = ' /A'
    EndSwitch

    $sOut = StringToBinary('0' & @CRLF, 2)
    $aMasks = StringSplit($sFileMask, ';')

    For $i = 1 To $aMasks[0]
        $hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '"' & $sSubdir & $sAttrib, @SystemDir, @SW_HIDE, 6)
        While 1
            $sRead = StdoutRead($hDir, False, True)
            If @error Then
                ExitLoop
            EndIf
            If $sRead <> "" Then
                $sOut &= $sRead
            EndIf
            Sleep(2)
        WEnd
    Next
    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
    If @error Then
        Return SetError(1)
    EndIf
    $aOut[0] = UBound($aOut) - 1
    Return $aOut
EndFunc   ;==>_FileSearch

Последний раз редактировалось madmasles, 05-04-2011 в 21:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:16, 05-04-2011 | #13


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


madmasles, мне идея со списком ваша понравилась. А могли бы вы подправить так, чтобы я в списке выбирал какие файлы сохранить?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 21:24, 05-04-2011 | #14


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата Pozia:
чтобы я в списке выбирал какие файлы сохранить? »
Завтра попробую сделать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:51, 05-04-2011 | #15


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Pozia,
То, что у меня получилось, в прикрепленном архиве. Вроде работает, проверял на Windows XP SP3 32 и Windows 7 SP1 32, Office 2003. Пытался написать здесь, но ругается, говорит, что слишком много символов.

PS
Поменяйте в скрипте на 14-ой строке $sExt = '*.xls' на $sExt = '*.xlsx', а то я на 2003 проверял.
Не надо, я добавил функцию на проверку версии, должно само определить.

Добавил вариант (3_Excel.7z) с возможностью изменения папки поиска файлов.

Последний раз редактировалось madmasles, 13-08-2011 в 14:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:27, 06-04-2011 | #16


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


madmasles, при попытке скомпилировать выскакивает ошибка на winAPIE.au3. типа не может открыть. Это какая то добавка которой у меня нет?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 21:32, 06-04-2011 | #17


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Pozia,
Забыл дать ссылку: Расширение стандартной AutoIt библиотеки WinAPI.au3.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:37, 06-04-2011 | #18


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


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

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 21:42, 06-04-2011 | #19


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Pozia,
Птичку сделал, сортировку добавил, только не по нажиманию по заголовку ListView, а перед заполнением таблицы.

Последний раз редактировалось madmasles, 13-08-2011 в 14:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:06, 06-04-2011 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Запуск файлов и их сохранение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Сохранение графических файлов umnik Хочу все знать 4 29-11-2010 15:23
Запрет на сохранение файлов вне профиля. sinchro Microsoft Windows NT/2000/2003 8 16-11-2007 12:11
Сохранение файлов и папок с HTML ksan Microsoft Windows 2000/XP 1 11-03-2007 03:35
Сохранение файлов Kasper Microsoft Windows NT/2000/2003 7 18-10-2003 03:06
Сохранение файлов из Интернета SL Microsoft Windows 2000/XP 6 03-06-2003 20:54




 
Переход