Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2015, 10:54   #1
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию Чтение Excel файлов в Lazarus

Должна же быть уже решена задача чтения Excel файлов в программе на Lazarus! Но пока найти готовое решение в сети не удалось. Такой код без проблем работает в Delphi, но выдаёт ошибку в Lazarus:

Код:
type TRegion = Array of Array of String;

procedure ReadExcelFile(FileName, Sheet: String; ColCount, RowCount: Integer; var Region: TRegion);
var Excel: Variant;
 i, j: Integer;
begin
  Excel:=CreateOleObject('Excel.Application');
  Excel.Application.WorkBooks.Add(FileName);
  Excel.DisplayAlerts:=False;
  for i:=0 to ColCount-1 do
  for j:=0 to RowCount-1 do
    Region[i, j]:=Excel.WorkSheets.Item[Sheet].Cells[j+1, i+1];
  Excel.Quit;
end;

procedure TForm1.OpenClick(Sender: TObject);
var i, j, ColCount, RowCount: Integer;
 Region: TRegion;
begin
ColCount:=5; RowCount:=5;
with OpenDialog1 do
  if Execute then
    begin
      SetLength(Region, ColCount, RowCount);
      ReadExcelFile(FileName, 'Sheet1', ColCount, RowCount, Region);
      StringGrid1.ColCount:=ColCount; 
      StringGrid1.RowCount:=RowCount;
      with StringGrid1 do
        for i:=0 to ColCount-1 do
        for j:=0 to RowCount-1 do
          Cells[i, j]:=Region[i, j];
    end;
end;
Есть ли понимание в чём проблема и как её решить?

Последний раз редактировалось AndrzejX; 06.11.2015 в 11:26.
AndrzejX вне форума Ответить с цитированием
Старый 06.11.2015, 11:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я не знаю, как решить вашу проблему.

Но стало любопытно. Подскажите, неужели вышеуказанный код ошибку выдаёт секретную?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.11.2015, 11:10   #3
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию

Выполнение прерывается, выскакивает ассемблер с кодом, на строке

Excel.Application.WorkBooks.Add(Fil eName);

Да, это в среде Lazarus. При непосредственном запуске программы вот что:

??? Add ??? WorkBooks ?????

Последний раз редактировалось AndrzejX; 06.11.2015 в 11:19.
AndrzejX вне форума Ответить с цитированием
Старый 06.11.2015, 11:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

чему равно FileName?

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

ну и так попробуйте изменить
Код:
type TRegion = Array of Array of AnsiString;

procedure ReadExcelFile(FileName, Sheet: AnsiString; ColCount, RowCount: Integer; var Region: TRegion);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.11.2015, 11:25   #5
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию

Да! Файл назван TestBook1. Название листа тоже изменено на Sheet1. Лежит в папке Plan, находящейся непосредственно на диске C.

Изменение String на AnsiString ничего не дало. Читал уже про проблемы в кодировках. Сейчас ещё попробую WideString.

Последний раз редактировалось AndrzejX; 06.11.2015 в 11:28.
AndrzejX вне форума Ответить с цитированием
Старый 06.11.2015, 11:29   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ясно.
А замена на AnsiString что-то дала?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.11.2015, 11:30   #7
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию

Нет, замена на AnsiString дела не меняет. WideString вызывает сообщение

Invalid Variant type cast
AndrzejX вне форума Ответить с цитированием
Старый 06.11.2015, 11:34   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

плохо. я не знаю, что тут можно сделать.

(p.s. поиск выдал такое - http://wiki.freepascal.org/FPSpreadsheet/
если кончатся идеи, то, м.б. попробовать?...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.11.2015, 11:38   #9
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию

Ну это да, читал уже и про такую библиотеку. Есть ещё такая альтернатива как CodeTyphon. Там, как читал, таких проблем вроде нет. Но ещё не пробовал. Просто не верилось, что такая распространённая проблема не имеет решения непосредственно в Lazarus. А оно вон как... Спасибо за уделённое мне время!

Кстати, думал исхитриться, и создать в Delphi dll, в которую и запихнуть процедуру чтения файла. Но уже этот вариант не работает даже в Delphi. Хотя тут я мог чего-то и неправильно состряпать. Но замена процесса чтения на просто

Sum:=X+Y;

работает через эту же dll

Последний раз редактировалось AndrzejX; 06.11.2015 в 11:46.
AndrzejX вне форума Ответить с цитированием
Старый 06.11.2015, 11:43   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от AndrzejX Посмотреть сообщение
Просто не верилось, что такая распространённая проблема не имеет решения непосредственно в Lazarus. А оно вон как... Спасибо за уделённое мне время!
ещё раз хочу обратить ваше внимание на то, что я вообще не спец в FPC/Lazarus! Возможно, что Вы слишком торопитесь, а специалисты просто ещё не заглядывали в эту тему. Тут на форуме Виталий aka Stilet вроде бы работает с Lazarus. Может быть, ему есть что сказать по теме.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Lazarus в Linux - Поиск файлов в папке BLACK_RAIN Lazarus, Free Pascal, CodeTyphon 4 08.10.2014 11:23
Обработка файлов(lazarus). Chelovekpredel Lazarus, Free Pascal, CodeTyphon 2 23.09.2012 12:14
Чтение и запись больших excel файлов на c# Bi0max C# (си шарп) 0 21.08.2012 20:33
Lazarus подключение .so, .dll файлов Diez_ Lazarus, Free Pascal, CodeTyphon 19 07.07.2011 21:23
Открытие html-файлов в Lazarus student2008 Lazarus, Free Pascal, CodeTyphon 2 25.12.2010 11:07