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

Вниз

проблема с импортом   Найти похожие ветки 

 
bagos[XZ]   (2006-04-08 09:42) [0]

добрый день всем мастерам,прошу помощи.
вот код импорта данных в StringGrid.
Не получаеться сделать так,чтобы импортированные данные добавлялись после уже имещихся в StringGrid,а то они заменяют предыдущие данные.Надеюсь на помощь

procedure TForm2.Excel2Click(Sender: TObject);
var
WorkBk : _WorkBook;
WorkSheet : _WorkSheet;
K, R, X, Y : Integer;
IIndex : OleVariant;
RangeMatrix : Variant;
NomFich : WideString;
fname:string;
begin
 if (OpenDialog1.Execute)
   then begin
     FName := OpenDialog1.FileName;
NomFich := fname;
IIndex := 1;
XLApp.Connect;
// Открываем файл Excel
XLApp.WorkBooks.Open(NomFich,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,0);
WorkBk := XLApp.WorkBooks.Item[IIndex];
WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
// Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
// столбцов, мы активируем его последнюю непустую ячейку
WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
// Получаем значение последней строки
X := XLApp.ActiveCell.Row;
// Получаем значение последней колонки
Y := XLApp.ActiveCell.Column;
// Определяем количество колонок в TStringGrid
 GenericStringGrid.ColCount := Y;
// Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
 RangeMatrix := XLApp.Range["A1",XLApp.Cells.Item[X,Y]].Value;
// Выходим из Excel и отсоединяемся от сервера
 XLApp.Quit;
 XLApp.Disconnect;
//  Определяем цикл для заполнения TStringGrid
K := 2;
 repeat
   for R := 1 to Y do
     GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
   Inc(K,1);
GenericStringGrid.RowCount := K + 1;
 until
  K > X;
// Unassign the Delphi Variant Matrix
  RangeMatrix := Unassigned;
   end
end;


 
Savek   (2006-04-08 10:14) [1]

В смысле при повторном использовании этой процедуры?
Ну так убери К:=2;


 
bagos[XZ]   (2006-04-08 10:17) [2]

убрал,дельфи начала ругаться,типо нет значения К


 
Savek   (2006-04-08 11:50) [3]

Убрать надо из этой процедуры, а начальное значение присвоить где-то в начале программы, например в Form1.OnCreate


 
bagos   (2006-04-08 15:36) [4]

все равно ругается


 
Nick_serov   (2006-04-08 16:01) [5]

Вот примерный код, приспосабливай и все получится =))))

procedure TForm1.xpButton1Click(Sender: TObject);
begin
if OD1.Execute then
begin
 n := OD1.FileName;                             //<<<<<<< OpenDialog
 ExAp1.Workbooks.Add(n,0);
 ExW1.ConnectTo(ExAp1.ActiveWorkbook);
 Progress.Max := strtoint(edit1.Text);
 Progress.Step := 1;
 grid1.RowCount := strtoint(edit1.Text);
 for i := 1 to strtoint(edit1.Text) do
     begin
       Progress.Position := i;
       for j := 1 to 9 do
       begin
         grid1.Cells[j,i] := ExAp1.Cells.Item[i,j].Value;
       end;
     end;
 ExW1.Close;
end;
end;

procedure TForm1.xpButton3Click(Sender: TObject);  //<<<<< Сохранение
begin
 if savedialog1.Execute then
 grid1.SaveToXLS(savedialog1.FileName);
end;


 
bagos   (2006-04-08 22:42) [6]

var
fname:string;
Progress:Variant;
i,j:integer;
begin
if OpenDialog1.Execute then
begin
fname := OpenDialog1.FileName;                           //<<<<<<< OpenDialog
XLApp.Workbooks.Add(n,0);
Progress.Max := strtoint(edit1.Text);
Progress.Step := 1;
GenericStringGrid.RowCount := strtoint(edit1.Text);
for i := 1 to strtoint(edit1.Text) do
    begin
      Progress.Position := i;
      for j := 1 to 9 do
      begin
        GenericStringGrid.Cells[j,i] := XLApp.Cells.Item[i,j].Value;
      end;
    end;

вот переделал чуток код, пишет ошибка с Variant и не открывает файл


 
bagos   (2006-04-08 22:43) [7]

и что такое за строчка  ExW1.ConnectTo(ExAp1.ActiveWorkbook)
ExW1 -- ??


 
bagos   (2006-04-09 15:06) [8]

неужели нету народа работающего с excel в delphi?


 
bagos   (2006-04-09 16:21) [9]

вот код с помощью которого импортирую,но почему то не получается сделать вывод только тех строк, в которых в excel листе есть какие то слова,
var
n,e:string;
b,i,j:integer;
begin
if OpenDialog1.Execute then
begin
n := OpenDialog1.FileName;
XLApp.Workbooks.Add(n,0);
XLApp.Connect;
GenericStringGrid.RowCount :=xlapp.ActiveCell.Row; //получается что xlapp.ActiveCell.Row=1,почему так???
b:=GenericStringGrid.RowCount;
for i := 2 to b do //i:=2 так как первая строка мне нужна пустой
    begin
          for j := 1 to 12 do
      begin
        GenericStringGrid.Cells[j-1,i-1] := XLApp.Cells.Item[i,j].Value;
end;
end;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
2-1144603233
veb
2006-04-09 21:20
2006.04.23
Метка диска


3-1141191591
r@dius
2006-03-01 08:39
2006.04.23
Объединение ячеек


6-1136916833
vladik
2006-01-10 21:13
2006.04.23
FTP на базе сокетов


2-1144232901
SveT
2006-04-05 14:28
2006.04.23
Относительный путь..


3-1140947792
Adulgeriy
2006-02-26 12:56
2006.04.23
переход на другую БД