Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

MS Excel + Delphi открытие файла (формат ячеек)   Найти похожие ветки 

 
КиТаЯц ©   (2004-11-05 11:21) [0]

Всем здраствуйте!
Открываю из под Delphi файл используя Excel OleObject

function XlsToStringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
var
 XLApp, Sheet: OLEVariant;
 RangeMatrix: Variant;
 x, y: Integer;
begin
 Result := False;
 XLApp := CreateOleObject("Excel.Application");
 try
   XLApp.Visible := False;
   XLApp.Workbooks.Open(AXLSFile);

   Sheet := XLApp.Workbooks[1].WorkSheets[1];
   Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

   //Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).NumberFormat:="@";

   x := XLApp.ActiveCell.Row;
   y := XLApp.ActiveCell.Column;

   //XLApp.Range["A1", XLApp.Cells.Item[X, Y]].NumberFormat:="@";
 ...
 И так далее...
 ...
 finally
   if not VarIsEmpty(XLApp)
     then begin
       XLApp.DisplayAlerts := False;
       XLApp.Quit;
       XLAPP := Unassigned;
       Sheet := Unassigned;
       Result := True;
     end;
 end;
end;


Тут такая беда... Excel по умолчанию открывает все ячейки в ОБЩЕМ формате, т.е. преобразует из как ему нравится. А мне надо в ТЕКСТОВОМ, т.е. чтобы ячейки открылись так как есть. Пытаюсь менять формат (заремареные строки) - вроде получается, но...
Ячейки УЖЕ переформатированы, т.е. это ничего не дает и еще больше запутывает данные и формат нужно поменять (задать) ДО ОТКРЫТИЯ ФАЙЛА (заполнения ячеек).

Как это сделать?
Спасибо.

Вариант "заранее сохранить xls файл задав текстовый формат всем ячейкам" не предлагать пожалуйста... (Excel открывает и другие "ячеистые" форматы)


 
КаПиБаРа ©   (2004-11-05 11:27) [1]

Непонятно что не работает. Вроде все правильно делаешь.
Вобщем логика такая.
Открываем файл.
Задаем формат у диапазона ячеек.
Вносим данные в эти ячейки.


 
КиТаЯц ©   (2004-11-05 13:12) [2]

Тут такое дело... Мне не надо вносить данные в ячейки Excel, мне надо их отттуда забрать (из готового файла). А он "открывается неправильно" - при открытии данные преобразовываются.

>Открываем файл.
>Задаем формат у диапазона ячеек.
Не получается - ячейки уже преобразовались и смена формата еще больше путает данные.

Короче, скорее всего вопрос содится к такой формулировке:
«Как из под Delphi задать Excel-OLE-обекту чтобы по умолчанию он все ячейки в "текстовом" формате, а не в "общем"?»


 
Symb   (2004-11-05 13:31) [3]

Насколько я помню, Excel открывает файл с теми форматами ячеек, которые были заданы при создании и редактировании файла. Т. е. он преобразовать данные должен был еще при вводе данных в ячейки.
Может быть, проблема заключается не в преобразовании при открытии, а в преобразовании данных при чтении содержимого ячеек в твои переменные из уже открытой книги?


 
КиТаЯц ©   (2004-11-05 13:42) [4]

2 Symb
Нет. Все так, как я описал. Собственно с Excel я начал заморачиваться как с универсальной штукой которая открывает кучу форматов от HTML до DBF...
Подробнее: http://www.dunin.hotmail.ru/xlsimp.html (там я, собственно, касаюсь вставшей проблеммы при открытии HTML-ки)


 
КаПиБаРа ©   (2004-11-05 13:52) [5]

КиТаЯц ©   (05.11.04 13:42) [4]
1. А если файл врукопашную в екселе открыть, данные правильно отображаются?

2. С каким типом данных проблемы? Случайно не с датой?


 
Gloomer ©   (2004-11-05 13:54) [6]

В Excel"e (чистый лист) форматируешь нужные ячейки, сохраняешь как шаблон (*.xlt). Потом в своей проге открываешь свой шаблон и...
Только в твоей проге открывается только один файл AXLSFile, а где же ячейки в общем формате?


 
Symb   (2004-11-05 13:59) [7]

А! Так значит открывается не .xls файл?

function Open(const Filename: WideString; UpdateLinks: OleVariant; ReadOnly: OleVariant; Format: OleVariant; Password: OleVariant; WriteResPassword: OleVariant; IgnoreReadOnlyRecommended: OleVariant; Origin: OleVariant; Delimiter: OleVariant; Editable: OleVariant; Notify: OleVariant;
Converter: OleVariant; AddToMru: OleVariant; lcid: Integer): Workbook; safecall;

Ну, только в поле Converter может быть что-то полезное, да и то не факт...


 
КиТаЯц ©   (2004-11-05 14:04) [8]

2 КаПиБаРа
1. Нет
2. Когда Время выглядит примерно так 01.01.01, то приображается в дату 01.01.2001; дата преображается как ей захочется, а № телефонов начинающиеся с +7 (+79272999999) преображаются в формулу какую-то страшную...

2 Gloomer
Через шаблон - это вариант :) Чего-то сразу в голову не пришло... Сразу вопрос:
Sheet := XLApp.Workbooks[1].WorkSheets[1];
...
задаем форматы
...
Sheet.SaveAs(?)
- что здесь писать для сохранения шаблона? достаточно только имя+.xlt подставить?


 
Gloomer ©   (2004-11-05 14:16) [9]

> Sheet.SaveAs(?) - что здесь писать для сохранения шаблона?  достаточно только имя+.xlt подставить?

Вот именно, этого достаточно. При открытии шаблона имя доку не присваивается, точнее "Имя_шаблона"+номер_дока.xls
И еще - у тебя данные экспортируются из Excel или импортируются?
Если экспортируются, то какая тебе разница до формата - мас преобразуешь как надо.
Если импортируются, то задаешь формат, а потом присваиваешь значение ячейке.



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.058 c
6-1091368838
sashapont
2004-08-01 18:00
2004.11.21
Кодировка


1-1099493279
Vir
2004-11-03 17:47
2004.11.21
Имя файла


1-1099488033
Stype
2004-11-03 16:20
2004.11.21
Каким оператором запустить любую программу ?


1-1099647315
nastya
2004-11-05 12:35
2004.11.21
ComLite32 -смотреть COM-порт


3-1098432800
TolkoNachal
2004-10-22 12:13
2004.11.21
Данные из БД ACCESS