MS Excel Delphi відкриття файлу (формат осередків)

Всім здрастуйте! Відкриваю з під 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;

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

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

Тут таке лихо. Excel за замовчуванням відкриває всі комірки у ЗАГАЛЬНОМУ форматі, тобто. перетворює з того, як йому подобається. А мені треба в текстовому, тобто. щоб осередки відкрилися так, як є. Намагаюся змінювати формат (зарімані рядки) - начебто виходить, але. Комірки ВЖЕ переформатовані, тобто. це нічого не дає і ще більше заплутує дані і формат потрібно змінити (задати) ДО ВІДКРИТТЯ ФАЙЛУ (заповнення осередків).

Як це зробити? Дякую.

Варіант "заздалегідь зберегти xls файл задавши текстовий формат усім осередкам" не пропонувати будь ласка. (Excel відкриває й інші "комірчасті" формати)

Незрозуміло, що не працює. Начебто все правильно робиш. Взагалі логіка така. Відкриваємо файл. Задаємо формат у діапазону осередків. Вносимо дані в ці комірки.

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

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

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

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

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

2. З яким типом даних є проблеми? Випадково не з датою?

У Excel'e (чистий аркуш) форматуєш потрібні осередки, зберігаєш як шаблон (*.xlt). Потім у своїй прозі відкриваєш свій шаблон і. ?

А! Отже, відкривається не .xls файл?

Function Open(const Filename: WideString; UpdateLinks: OleVariant; ReadOnly: OleVariant; Format: OleVariant; Password: OleVariant; WriteResPassword: OleVariant; IgnoreRead Notify: OleVariant; Converter: OleVariant; AddToMru: OleVariant; lcid: Integer): Workbook; safecall;

Ну, тільки в полі Converter можебути щось корисне, та й то не факт.

2 Gloomer Через шаблон - це варіант :) Чогось відразу на думку не спало. Відразу питання: Sheet := XLApp.Workbooks[1].WorkSheets[1]; . задаємо формати . Sheet.SaveAs(?) - що тут писати для збереження шаблону? достатньо тількиім'я+.xltпідставити?

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

Саме цього досить. При відкритті шаблону ім'я доку не надається, точніше "Ім'я_шаблону"+номер_дока.xls І ще - у тебе дані експортуються з Excel або імпортуються? Якщо експортуються, то яка тобі різниця до формату - мас перетворюєш як треба. Якщо імпортуються, то задаєш формат, а потім надаєш значення комірці.