Главная страница
    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.007 c
3-27339
Настенька
2003-09-21 13:58
2003.10.09
Словарь !!!


14-27735
Кен
2003-09-16 05:45
2003.10.09
В Китае обнаружен холм, по склону которого вода течет вверх


4-27775
LOX
2003-08-02 17:47
2003.10.09
Уничтожение формы


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


1-27468
Юрий Ж.
2003-09-25 08:55
2003.10.09
Переменные в DLL?





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