![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MS Excel + Delphi открытие файла (формат ячеек) [D7, WinXP]
КиТаЯц © (2004-11-05 11:21:00)Всем здраствуйте!
Открываю из под 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 открывает и другие "ячеистые" форматы)
Gloomer (2004-11-05 14:16:00) [1]> Sheet.SaveAs(?) - что здесь писать для сохранения шаблона? достаточно только имя+.xlt подставить?
Вот именно, этого достаточно. При открытии шаблона имя доку не присваивается, точнее "Имя_шаблона"+номер_дока.xls
И еще - у тебя данные экспортируются из Excel или импортируются?
Если экспортируются, то какая тебе разница до формата - мас преобразуешь как надо.
Если импортируются, то задаешь формат, а потом присваиваешь значение ячейке.
КиТаЯц (2004-11-05 14:04:00) [2]2 КаПиБаРа
1. Нет
2. Когда Время выглядит примерно так 01.01.01, то приображается в дату 01.01.2001; дата преображается как ей захочется, а № телефонов начинающиеся с +7 (+79272999999) преображаются в формулу какую-то страшную...
2 Gloomer
Через шаблон - это вариант :) Чего-то сразу в голову не пришло... Сразу вопрос:
Sheet := XLApp.Workbooks[1].WorkSheets[1];- что здесь писать для сохранения шаблона? достаточно только имя+.xltподставить?
...
задаем форматы
...
Sheet.SaveAs( ?)
Symb (2004-11-05 13:59:00) [3]А! Так значит открывается не .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 может быть что-то полезное, да и то не факт...
Gloomer (2004-11-05 13:54:00) [4]В Excel'e (чистый лист) форматируешь нужные ячейки, сохраняешь как шаблон (*.xlt). Потом в своей проге открываешь свой шаблон и...
Только в твоей проге открывается только один файл AXLSFile, а где же ячейки в общем формате?
КаПиБаРа (2004-11-05 13:52:00) [5]КиТаЯц © (05.11.04 13:42) [4]
1. А если файл врукопашную в екселе открыть, данные правильно отображаются?
2. С каким типом данных проблемы? Случайно не с датой?
КиТаЯц (2004-11-05 13:42:00) [6]2 Symb
Нет. Все так, как я описал. Собственно с Excel я начал заморачиваться как с универсальной штукой которая открывает кучу форматов от HTML до DBF...
Подробнее: http://www.dunin.hotmail.ru/xlsimp.html(там я, собственно, касаюсь вставшей проблеммы при открытии HTML-ки)
Symb (2004-11-05 13:31:00) [7]Насколько я помню, Excel открывает файл с теми форматами ячеек, которые были заданы при создании и редактировании файла. Т. е. он преобразовать данные должен был еще при вводе данных в ячейки.
Может быть, проблема заключается не в преобразовании при открытии, а в преобразовании данных при чтении содержимого ячеек в твои переменные из уже открытой книги?
КиТаЯц (2004-11-05 13:12:00) [8]Тут такое дело... Мне не надо вносить данные в ячейки Excel, мне надо их отттуда забрать (из готового файла). А он "открывается неправильно" - при открытии данные преобразовываются.
>Открываем файл.
>Задаем формат у диапазона ячеек.
Не получается - ячейки уже преобразовались и смена формата еще больше путает данные.
Короче, скорее всего вопрос содится к такой формулировке:
«Как из под Delphi задать Excel-OLE-обекту чтобы по умолчанию он все ячейки в "текстовом" формате, а не в "общем"?»
КаПиБаРа (2004-11-05 11:27:00) [9]Непонятно что не работает. Вроде все правильно делаешь.
Вобщем логика такая.
Открываем файл.
Задаем формат у диапазона ячеек.
Вносим данные в эти ячейки.