Главная страница
    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.46 MB
Время: 0.008 c
3-27371
_Novice_
2003-09-17 15:13
2003.10.09
Sorting


14-27667
wnew
2003-09-18 18:20
2003.10.09
---|Ветка была без названия|---


3-27320
ShellDim
2003-09-21 15:45
2003.10.09
создание соединения


1-27436
Chlavik
2003-09-28 01:36
2003.10.09
Координаты кнопочки на окне


1-27479
777
2003-09-26 21:53
2003.10.09
Action





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский