Запись и чтение Excel.

Тема в разделе "Delphi - Базы данных", создана пользователем Dimafe6, 7 июл 2010.

  1. Dimafe6

    Dimafe6 Гость

    Здраствуйте. Подскажите как реализировать возможность записывать информацию с полей в лист Excel. После записи, при выборе соответствующего пункта меню, производить чтение информации из Excel, с выводом результата в те же поля TEdit.Перемещение по листу Excel осуществлять с помощью SpinEdit. Например у меня на форме находится 12 полей TEdit,3 ComboBox,1 RichEdit.
    Перед записью проверять заполненость столбца 1 в Excel, и устанавливать счётчик SpinEdit в положение первой незанятой ячейки столбца 1.
    При выборе пункта меню:"Добавить запись" нужно записать информацию со всех полей в лист Excel, и прибавить счётчику SpinEdit единицу, чтобы можно было записать информацию в следующую строчку.
    При выборе пункта меню:"Прочитать" нужно выводить информацию по строчкам во все поля. Индексом строчки служит SpinEdit.
    Я сделал так:
    Вот функция проверки на занятость ячеек столбца 1:
    Код (Delphi):
    Function NoUsedCells(FindIN:TExcelApplication):integer;
    var i,n:integer;
    Begin
    i:=0;n:=0;
    Repeat
    i:=i+1;
    begin
    if FindIN.Cells.Item[i,1].Value<>'' then n:=n+1;
    end;
    until FindIN.Cells.Item[i,1].Value='';
    n:=n-1;
    Result:=n;
    end;
    Вот сама запись:
    Код (Delphi):
    "Добавить запись":
    ...
    IndexCur:=NoUsedCells(ExcelApplication1); //присваиваю начальную позицию для записи
    ExcelApplication1.Cells.Item[IndexCur,1].Value:=Edit1.Text; //записываю значение полей
    ...//записываю значение полей
    ExcelApplication1.Cells.Item[IndexCur,1].Value:=Edit12.Text; //записываю значение полей
    SpinEdit1.Value:=SpinEdit1.Value+1;
    ExcelApplication1.ActiveWorkbook.Close(True,FExcel,False,0); //закрываю и сохраняю книгу
    Вот чтение:
    Код (Delphi):
    "Прочитать":
    Edit1.Text:=ExcelApplication1.Cells.Item[SpinEdit1.Value,1].Value;//читаю
    ... //читаю
    Edit12.Text:=ExcelApplication1.Cells.Item[SpinEdit1.Value,1].Value; //читаю
    ExcelApplication1.ActiveWorkbook.Close(True,FExcel,False,0); //закрываю и сохраняю книгу
    Правильно ли я всё ето делаю? Может есть лучший алгоритм?Или проще использовать Access?. Пишу для себя, поетому нужно все сделать как можно проще. Заранее благодарен.
     
  2. 0rtega

    0rtega Гость

    Да тут и алгоритма особого нет, упрощать нечего. Но я бы написал так:
    Код (Text):
    Function NoUsedCells(FindIN:TExcelApplication):integer;
    var i:integer;
    Begin
    i:=0;
    Repeat
    i:=i+1;
    until FindIN.Cells.Item[i,1].Value='';
    Result:=i;
    end;
    Возвращать функция же должна первую встреченную незанятую ячейку 1-го столбца, как я понял? У вас она указывает на последнюю занятую...даже на предпоследнюю
    При чтении и записи нужно номер столбца наверное итерировать...? А то что ж у вас в одну и ту же ячейку долбить будет.
    По мне, так access не проще excel, там базу надо создавать, ну ее. Хотя работать будет быстрей, если данных куча
     
Загрузка...

Поделиться этой страницей