Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];

Вниз

Чтение из Excel-книги в Дельфи   Найти похожие ветки 

 
deadbitch   (2003-09-17 23:19) [0]

Заголовок немного кривоват, но суть такова. Имеется некая БД реализованная в Excel-файле, со связками с другими файлами, логикой (тучи формул etc.). Так вот, с помощью каких средств в Дельфи можно открыть этот файл и читать его как таблицу, чтобы перенести данные в проектируемую БД. Интересует детальная информация, если можно пример кода, etc.
PS: нашел в факе Excel через OLE - оно в ту сторону или нет? Может через стандартные компоненты типа TExcelWorkbook?


 
MsGuns   (2003-09-17 23:41) [1]

Дай мыло - кину проектец, который читает из Excel - книги заданные ячейки. Код простоватый, да и Excel не закрывается корректно, но суть поймешь


 
MsGuns   (2003-09-17 23:54) [2]

Лови фрагменты собственно чтения:


interface

uses... ComObj, Excel97, OleServerButtons;
...
const
colNw: integer = 28;
PatternBeginRange: string = "Начало данных";
PatternEndRange: string = "Конец данных";

var
Form1: TForm1;
CurDir: string;
colw: integer; // Ширина колонки для наименования узла в стринггриде
xlAp: TExcelApplication; // Объект Excel-приложения
xlBk: Excel97.ExcelWorkBook; // Книга Excel
xlSt: Excel97.ExcelWorkSheet; // Страница книги Excel
Valu,Values: OLEVariant;

implementation
...
procedure TForm1.sbtLoadExcelClick(Sender: TObject);
// Загрузка данных из таблицы Excel
var
ISheet: Excel97._Worksheet;
IRange: Excel97.Range;
i,j,k: integer;
StrtI,EndI: integer; // Строки начала и конца области значений
s: string;
begin
Screen.Cursor := crHourGlass;
// Создать объект Excel и подключиться к нему (Ole-сервер)
if not Assigned(xlAp) then
xlAp:=TExcelApplication.Create(nil);
xlAp.ConnectKind:=ckRunningOrNew;
xlAp.Connect;
// Загрузить в Excel выбранную книгу
xlBk:=xlAp.Workbooks.Add(CurDir+Form1.cbxSelXls.Text,0);
xlSt:=xlBk.Worksheets.Item[1] as Excel97.ExcelWorkSheet;
if Assigned(xlBk) then
try
ISheet := xlBk.Worksheets.Item["Лист1"] as Excel97._Worksheet;
try
IRange := ISheet.UsedRange[0];
Values := IRange.Value;
finally
IRange := nil;
ISheet := nil;
end;
except
Screen.Cursor := crDefault;
raise Exception.Create("Не могу прочитать данные в массив!");
end;
// Организация поиска ключевых слов "Начало данных" и "Конец данных",
// находящихся в колонке 1 (второй индекс размерности массива Values
StrtI := 0; EndI := 0;
Screen.Cursor := crDefault;
k := 0;
for i := VarArrayLowBound(Values,1) to VarArrayHighBound(Values,1) do
begin
Valu := VarArrayGet(Values,[i,1]);
if Pos(PatternBeginRange,VarToStr(Valu))>1 then
StrtI := i;
if Pos(PatternEndRange,VarToStr(Valu))>1 then
EndI := i;
end;
if EndI>(StrtI+1) then
begin
Form1.sgrData.RowCount := EndI-StrtI;
for i := StrtI+1 to EndI-1 do
begin
inc(k); // Строка грида
for j := 0 to VarArrayHighBound(Values,2)+2 do
Form1.sgrData.Cells[j,k] := "";
for j := VarArrayLowBound(Values,2) to VarArrayHighBound(Values,2) do
begin
s := Trim(VarToStr(VarArrayGet(Values,[i,j])));
if s>"" then
begin
Form1.sgrData.Cells[j+2-1,k] := s;
break; // Игнорируем все правые ячейки
end;
end;
Form1.sgrData.Cells[0,k] := IntToStr(k);
Form1.sgrData.Cells[1,k] := "";
end;
Form1.sbtCnvTree.Enabled := true;
Form1.sbtLoadExcel.Enabled := false;
end;
// Убрать полосу верт.прокрутки
// SetScrollRange(Form1.sgrData.Handle,SB_VERT,0,0,false);
Form1.lbRowCount.Caption := "Строк "+IntToStr(Form1.sgrData.RowCount-1);
FreeAndNil(xlAp);
Form1.sbtSaveTbl.Enabled := false;
end;



 
deadbitch   (2003-09-18 21:44) [3]

Пасибо! А я нашел в книге Марко Кэнту (Mastering Delphi 6) как открывать Excel через ADO. Круто и не надо никаких OLE. Работаешь как с БД. Супер!!! Если надо - кину кусок.


 
MsGuns   (2003-09-19 11:09) [4]

Кинь !



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

Форум: "Базы";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
14-27666
MacroDenS
2003-09-19 18:27
2003.10.09
Интернет провайдеры Москвы


1-27483
ki11er
2003-09-26 22:02
2003.10.09
Доступность сетевого диска


1-27474
Сергей Ж.
2003-09-27 00:58
2003.10.09
Надо такую прогу сварганить...


14-27645
BasjaB
2003-09-19 14:35
2003.10.09
Про вские ХТМЛ


3-27370
P0tia
2003-09-18 19:51
2003.10.09
Проблема с Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский