Как в одной операции прочитать TXT файл и сохранить в XLS
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Ivanvas Участник
Вступление в Клуб: 16.04.2008
|
Пт Ноя 25, 2011 15:02  Как в одной операции прочитать TXT файл и сохранить в XLS |
|
Полезность: Нет оценки
|
Доброго дня всем.
Есть проблемка открыть txt-файл хранящийся в локальной директории, взять из него данные и сохрнить их в excel.
Проблема в том что stdio для работы с текстовым файлом отрабатывает только в разделе операции "Тело" в части копирования файла с локального диска на сервер и открытиея его на чтение (stdio.open(path,file,'r'); где path - это путь на сервере), если в разделе "Проверка", то говорит "File not found", а работа с excel шаблоном работает только в "Проверка" в валидации. Как это победить, мне же надо первично открыть текстовый файл, чтобы вытянуть из него информацию, а потом только заполнить шаблон excel, а тут обратная схема только работает.
Если пробую сразу открыть файл на чтение с локального диска т.е. path = путь на локальном диске то ошибка "Операция не может быть выполнена для этого файла". |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пт Ноя 25, 2011 17:04   |
|
Полезность: Нет оценки
|
Попробуйте сначала принудительно закачать файл на сервер, вызвав операцию копирования через PLPCALL.
Например так:
Код: | stdio.put_line_buf('<% PLPCALL [FILE_SALARY].[COPY_FILE](%PARAM%.P_LOCAL_PATH=>'''||::[SYSTEM_PARAMS].[GET]('PATH',null)||''',
%PARAM%.P_FILENAME=>'''||P_FILES_REE(i).[LOCAL_PATH]||''',
%PARAM%.P_SERVER_PATH=>'''||V_FILE.[DST_PATH]||''',
%PARAM%.P_SERVER_FILENAME=>'''||P_FILES_REE(i).[LOCAL_PATH]||''',
%PARAM%.P_DIRECTION=> ''true''
)%>'); |
ну а далее дело техники _________________ всегда есть как минимум 2 выхода |
|
 |
Ivanvas Участник
Вступление в Клуб: 16.04.2008
|
Пн Ноя 28, 2011 11:37   |
|
Полезность: Нет оценки
|
Alexsey пишет: | Попробуйте сначала принудительно закачать файл на сервер, вызвав операцию копирования через PLPCALL.
Например так:
Код: | stdio.put_line_buf('<% PLPCALL [FILE_SALARY].[COPY_FILE](%PARAM%.P_LOCAL_PATH=>'''||::[SYSTEM_PARAMS].[GET]('PATH',null)||''',
%PARAM%.P_FILENAME=>'''||P_FILES_REE(i).[LOCAL_PATH]||''',
%PARAM%.P_SERVER_PATH=>'''||V_FILE.[DST_PATH]||''',
%PARAM%.P_SERVER_FILENAME=>'''||P_FILES_REE(i).[LOCAL_PATH]||''',
%PARAM%.P_DIRECTION=> ''true''
)%>'); |
ну а далее дело техники |
Попробовал так, все равно не находит файл. Решил проблему по другому, отказался от txt, взял xls с данными. Тем не менее спасибо. |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Вт Ноя 29, 2011 06:05   |
|
Полезность: 1
|
Ivanvas пишет: | Alexsey пишет: | Попробуйте сначала принудительно закачать файл на сервер, вызвав операцию копирования через PLPCALL.
Например так:
Код: | stdio.put_line_buf('<% PLPCALL [FILE_SALARY].[COPY_FILE](%PARAM%.P_LO... )%>'); |
ну а далее дело техники |
Попробовал так, все равно не находит файл. Решил проблему по другому, отказался от txt, взял xls с данными. Тем не менее спасибо. |
Вероятно, ты вывел в буфер команду, а потом сразу начал искать файл. Это ошибка. Надо дать Навигатору прочитать данные из буфера, распознать команду и выполнить ее.
Тут следует действовать из следующих предпосылок:
1. Файл, к которому ты пытаешься получить доступ, находится на клиенте.
2. А программа выполняется на сервере.
3. Обмен информацией клиента с сервером происходит через АРМ Навигатор, то есть, после того как ты выполнил stdio.put_line_buf, необходимо дождаться отработки этой операции, то есть дождаться, когда выполнятся валидатор и VB-скрипт.
4. На локальной станции отрабатывает ТОЛЬКО vb-скрипт
5. Все, написанное на PL/+, отрабатывает ТОЛЬКО на сервере.
Вывод? Либо файл перетащить на сервер, либо работать сразу на клиенте, не используя PL/+ и stdio вообще.
Я бы сделал вообще по-другому:
1. запустил операцию.
2. Дождался нажатия на кнопку.
3. выполнил бы из клиент-скрипта result = Form1.ScriptPlayEx("<%PLPCALL [ТИП].[ОПЕРАЦИЯ](ПАРАМЕТРЫ)%>") копирование файла с локальной станции на сервер - ну тут можно посмотреть примеры уже реализованных операций
4. клиент-скрипт будет дожидаться, пока отработает предыдущая команда, так что считаем, что файл уже на сервере. поэтому выполняем Form1.ScriptServerValidate OK, "FILE_SENDED", таким образом, ты командуешь скрипту выполнить секцию валидации операции на сервере с p_info = FILE_SENDED
5. В секции валидации операции нужно добавить обработку if p_info = 'FILE_SENDED' then <чтение и обработка txt-файла>
6. Обрати внимание на закладку операции "дополнительные свойства", группа "Проверки" - должна быть включена обработка действий на клиенте; контрол (в данном случае кнопка) должен быть отмечен как валидируемый (свойство CheckValidate из РЭФ); ну и в клиент-скрипте должна присутствовать функция Main.
Ну и напоследок, чтобы посмотреть, какие файлы находятся на сервере, используй stdio.file_list
Ну или вообще использовал в клиент-скрипте что-нибудь типа Код: | Function ReadLineTextFile
Const ForReading = 1, ForWriting = 2
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
Set xls = CreateObject("Excel.Application")
Set book = xls.Workbooks.Add
Set sheet = book.Worksheets(1)
Sheet.Activate
xls.Visible=True
Sheet.Cells(1,1) = "Hello, world!"
Sheet.Cells(2,2) = f.ReadLine
'Ну и дальше перекинул бы данные из текстового файла в эксель, используя f.ReadLine
End Function |
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|