Страница 1 из 1

Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Чт мар 01, 2012 3:21 pm
Zagzag228
Добрый день. Шикарный чат, с отличным скриптовым движком. Очень удобная штука со "считыванием" с файла.
А у меня такой вопрос, как сделать это же, тока чтобы по определенной команде Элизе (например !данные) Элиза выдавала список 20 последних строк из таблицы Excel (Excel файлик из 8 столбиков и 1000 строк.) ???
Пример таблицы могу приложить. :?:

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Чт мар 01, 2012 3:40 pm
Алексей Пикуров
День добрый. Если вы сможете достать данные из MS Excel файла - то без проблем.

Как их вычитать оттуда? Дайте файлик, подумаем.

P.S. Тема отделена.

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Чт мар 01, 2012 4:02 pm
Zagzag228
Вот файл, данных много, нужно, чтобы всегда по команде можно было последние 20 строк отобразить.
Такой скрипт 100% многим пригодиться в корпоративных чатах, для статистики и т.д.
Жду вашей помощи.

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Чт мар 01, 2012 4:21 pm
Алексей Пикуров
Сделайте экспорт вашего файла в CSV текстовый формат, чтобы с native XLSX не мучиться. И вычитывайте скриптом уже текстовый файл, там всё элементарно. Попробуйте.

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Чт мар 01, 2012 4:36 pm
Алексей Пикуров
P.S. Ну, или если уж совсем никак самому, или есть какие-то проблемы с конвертацией - то можем сделать скрипт+доп.обвесок для вычитки из Excel-файла для вас на заказ.

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Чт мар 01, 2012 4:49 pm
Zagzag228
Да нам не принципиально, пусть будут и в CSV файле храниться, как сделать, чтобы по команде выдавало только последние 20 из списка CSV?

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Чт мар 01, 2012 5:01 pm
Алексей Пикуров
Ок, погодите немного, сейчас вам скрипт рожу :) Только, чур - "допиливать под себя" уже сами.

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Пн мар 05, 2012 5:50 pm
Алексей Пикуров
День добрый.

Скрипт готов. Итак, исходный файл в формате CSV должен выглядеть так (по вашему примеру, несколько строк из вашего файла):
Код: Выделить всё
п/п; подпись;участник;Список доп номера;порядковый;число;положение;примечание;СЧЕТ №; Сумма по счету ;
29;Егоров;Саша;241000029;124144662;;ДА;;;;
30;Егоров;Саша;241000030;124144663;;ДА;;593 от 01.11.10; 10 000,00р. ;
31;Петров;Николай;241000031;124144664;;ДА;;;;
32;Егоров;Пётр;241000032;124144665;;ДА;;592 от 01.11.10; 6 000,00р. ;

Скрипт "слушает", что скажут роботу-Элизе в привате, и, если это команда "!данные", то вычитывает заданное количество строк из файла D:\data.csv (местоположение может быть любым, настраивается константой в скрипте).

Если ввести, например "!данные 10" - то прочитается последние 10 строк. Если цифру не указать - читаются последние 20. Количество можно настроить в скрипте. Регистр команды не важен, можно написать большими и маленькими буквами.

Выглядит в результате это так в интерфейсе MyChat Client:
lastrecords.png

А вот сервер со скриптом, обратите внимание, в какое событие необходимо записать скрипт:
lastrecordsscriptsource.png

Ну и собственно сам исходник скрипта:
Код: Выделить всё
const
  sFile = 'D:\data.csv';
  nTitles = 10;
 
var
  iUINFrom, iUINTo, iCountLastMessages: integer;
  sMsg: string;

function GetLastLinesFromFile(sFileName: string; nLines: integer): string;
var
  sOut, s, sBackup: string;
  i, j, iCount: integer;
  sTitles: array[1..nTitles] of string;
begin
  iCount := GetTextFileLinesCount(sFileName);
 
    if iCount >= nLines then begin
      sOut := 'Последние ' + IntToStr(nLines) + ' записей:' + CRLF;
      LoadLineFromFile(sFileName, 1, s);
     
        for i := 1 to nTitles do sTitles[i] := Trim(GetNextSt(s, ';'));
     
        for i := iCount - nLines + 1 to iCount do begin
          if LoadLineFromFile(sFileName, i, s) then begin
            for j := 1 to nTitles do sOut := sOut + sTitles[j] + ': ' + Trim(GetNextSt(s, ';')) + ';'; 

            sOut := sOut + CRLF;
          end; 
        end;
    end else sOut := ''; 
 
  result := sOut;
end;
 
begin
  sMsg := mGetLastPrivateMessage(iUINFrom, iUINTo);
 
    if iUINTo = 0 then 
      if Trim(UpperCase(GetNextSt(sMsg, ' '))) = '!ДАННЫЕ' then begin
        if sMsg = '' then iCountLastMessages := 20
          else if isSTNumbers(sMsg) then iCountLastMessages := StrToInt(sMsg)
            else iCountLastMessages := 20;
           
        sMsg := GetLastLinesFromFile(sFile, iCountLastMessages);
       
        mModifyLastPrivateMessage(iUINFrom, 0, '');
       
        mSendPrivateMessage(iUINFrom, sMsg);
      end;
end.

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Вт мар 06, 2012 3:20 pm
Zagzag228
Шикарно!! Огромное спасибо, никак не нарадуемся покупке) :)

Re: Вычитка данных из Excel и отправка от имени робота

СообщениеДобавлено: Пт сен 09, 2016 3:00 pm
Алексей Пикуров
В новой версии MyChat скриптовая функция mSendPrivateMessage была изменена, пожалуйста, учтите это и переделайте свои скрипты.

Справка