Форум: "Базы";
Текущий архив: 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