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

Вниз

Чтение из 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-27719
Knight
2003-09-19 12:41
2003.10.09
Как окупить затраты на web-проект?


4-27788
Виктор
2003-08-04 21:08
2003.10.09
Как получить хэндел едита чужого окна?


14-27710
Санёк
2003-09-21 19:08
2003.10.09
Добрый день мастера!


14-27726
NeyroSpace
2003-09-20 14:44
2003.10.09
Всем программистам! СРОЧНО! Собраться в организованные группы и


1-27447
Ser_ega
2003-09-27 23:09
2003.10.09
Дата и время!