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

Жестокий облом от Borland...

Добавлено: 12 ноя 2006, 12:57
Svoja4ok
В своём первом топике на этом форуме я спрашивал, как мне сохранить массив в файл екселя, мне порекомендовали если я не хочу заморачиваться, записать в текстовый файл с разделителем табуляции и с расширением xls. Сначала так и сделал:

Код: Выделить всё

 procedure TForm3.N2Click(Sender: TObject);
var t: textfile;
    i:integer;
begin
if savedialog1.Execute then
 begin
 assignfile(t, savedialog1.FileName);
  rewrite(t);
  for i:=1 to stringgrid1.ColCount-1 do
   write(t, stringgrid1.cells[i,2],'');
  writeln(t);
  for i:=1 to stringgrid1.ColCount-1 do
   write(t, stringgrid1.cells[i,3],'');
  writeln(t);
  write(t, label2.caption,'',label3.caption,'',label4.caption);
  closefile(t);
Но напоролся на грабли в траве: открыв файл, экзель не только не раскидал всё по ячейкам, но и вместо букв были иероглифы... (Office 2003 Professional)

Тогда я решил разобраться с нормальным сохранением в екзель.. получилось так:

Код: Выделить всё


uses .........., comobj,........
.......
 procedure TForm3.N2Click(Sender: TObject);
var 
    i:integer;
    XL:Variant;
begin
if savedialog1.Execute then
  XL:= CreateOleObject('Excel.Application');
  XL.WorkBooks.Add;
  XL.WorkBooks[1].WorkSheets[1].Name:='test';
  for i:=1 to stringgrid1.ColCount-1 do begin
  XL.WorkBooks[1].Sheets[1].Cells[i,1]:=stringgrid1.cells[i,2];
  XL.WorkBooks[1].Sheets[1].Cells[i,1]:=stringgrid1.cells[i,3];
  XL.Workbooks[1].SaveAs(savedialog1.filename);
  end;
     XL.DisplayAlerts := False;
     XL.Quit;
     XL := Unassigned;
Но и тут меня ждал облом, при компиляции мне сказали что, компилятор не знает такого понятия ( Undeclared Identifer) как CreateOleObject, Workbooks, и всё что есть в этом коде связоное с екзелем.

Поковырявшись в инете я наткнулся на совсем печальное известие о том, что в Delphi 8 (а я на нем и пишу), в библиотеку ComObj не добавляли описание и методы работы с такими вещами....

Так чтоже мне теперь делать, господа? Есть мысль что можно засунуть в него библиотеку от 7-ого делфи, но встанет ли она?
Или попытаться простым (первым примером) способом всё таки сохранять...?

Подскажите пожалуйста....

Добавлено: 12 ноя 2006, 16:24
somewhere
Попробуй экспортировать массив в DBF и открыть его Excel'ем

Добавлено: 12 ноя 2006, 20:11
Игорь Акопян
Svoja4ok, ну вапче-то XL у тебя объявлен вариантом, а вариант не имеет таких свойств, так что компилятор прав. Надо либо делать приведение типа, либо копать в сторону интерфейсов экселя что-то типа XL: IExcelApplication...

ЗЫ. а если уж сохранять в текстовый формат, то имхо, лучше в качестве разделителя взять ";" и расширение дать CSV

Добавлено: 13 ноя 2006, 00:01
Svoja4ok
Игорь Акопян писал(а):Svoja4ok, ну вапче-то XL у тебя объявлен вариантом, а вариант не имеет таких свойств, так что компилятор прав. Надо либо делать приведение типа, либо копать в сторону интерфейсов экселя что-то типа XL: IExcelApplication...
А можно чутка примеров? просто не доконца представляю как это должно выглядеть..
Игорь Акопян писал(а): ЗЫ. а если уж сохранять в текстовый формат, то имхо, лучше в качестве разделителя взять "]
Хм, раскидал по ячейкам, но почему-то первая строка выравнена по правому краю, вторая по левому, третья ваще по центру... И опять иероглифы..(((

Добавлено: 13 ноя 2006, 10:48
Игорь Акопян
неужели в Д8 убрали компоненты для работы с Офисом?

Добавлено: 13 ноя 2006, 14:27
Svoja4ok
CreateOleObject located in ComObj.pas has not been ported to
Borland.Vcl.ComObj.pas.
Точно уже не помню где нашёл...

и вот здеся народ обсуждал

Добавлено: 13 ноя 2006, 16:58
AiK
Svoja4ok, во-первых, тебе насоветовали не очень хорошо, а во-вторых ты реализовал не правильно :)
Лучше файлу дать расширение csv (comma separated values), а данные разделять запятыми или точкой с запятой (причём следить, чтобы в значениях, которые ты записываешь в файл не было не экранированных разделителей). Ты ещё разделял не табами, а пробелами. А с иероглифами у тебя проблема скорее всего из-за кодировки (наверное у файла DOS кодировка). Excel при открытии файла должен спрашивать в какой кодировке его открыть.

Добавлено: 13 ноя 2006, 23:30
Svoja4ok
AiK, разделял как раз табами... просто сюда наверно как то подругому привёл. (кнопку Tab и кнопку Space перепутать сложно)... А можноли как- нибудь указать кодировку при записи файла? а то триклятый экзель ничего не спрашивает при открытии..
причём следить, чтобы в значениях, которые ты записываешь в файл не было не экранированных разделителей
всмысле не экранированных?

И всё же можно ли как нибудь сохранять в xls? или csv в моём случае надёжнее?

Добавлено: 16 ноя 2006, 10:48
Svoja4ok
Народ! Ну дайте реальный ответ: как мне сохранить в файл екзель, чтобы он при открытии енто всё раскидал и были НЕ иероглифы?
Мне нужно просто сохранить файл по правилам екзеля, но не более того...

Добавлено: 16 ноя 2006, 15:08
AiK
Вот этот файлик сохрани на диск и открой в Exele:
[quote="sample1.txt"]
проверка]
и этот тоже
[quote="sample2.txt"]
ЇаRў_аЄ ]
Открывать через file->open. Разделитель правильный указать не забудь :)
NB: я кстати тоже наврал. С расширением csv диалог с выбором кодировки не высвечивается. Я ошибочно делал расширение cvs.