Показать сообщение отдельно
  #1  
Старый 14.07.2008, 12:39
Аватар для XIO
XIO XIO вне форума
Новичок
 
Регистрация: 06.12.2007
Сообщения: 77
Репутация: 32
По умолчанию Импорт из Excel. Сбой рабочего алгоритма.

Имеется модуль. Исходник тут.

Использовал для импорта из Excel в StringGrid. Прекрасно работает.
Сейчас немного модернизировал программу. Теперь необходимо импортировать в БД. Так вот.
При выполнении кода:
Код:
          MailBotForm.StringGrid1.Cells[3,I] := IntToStr(I+1);
          Cell1 := GetCellIndex(2,I+1);
          MailBotForm.StringGrid1.Cells[1,I] := ExcelApplication.Range[Cell1,Cell1].Value2;
          Cell1 := GetCellIndex(3,I+1);
          MailBotForm.StringGrid1.Cells[2,I] := ExcelApplication.Range[Cell1,Cell1].Value2;
Всё замечательно работает. Значение ExcelApplication.Range[Cell1,Cell1].Value2 равно тому значению, что записано в файле Excel и в StringGrid выводится "красивое" и правильное значение...

В новой версии мне необходимо это же казалось бы значение передать в параметр TDataSet. Делаю так:
Код:
      MainDM.HaveDuplicate.Close;
      Cell1 := GetCellIndex(2,I+1);
      MainDM.HaveDuplicate.Parameters.ParamByName('Name').Value := VarToStr(ExcelApplication.Range[Cell1,Cell1].Value2);
      MainDM.HaveDuplicate.Open;

однако вместо ФИО или Email адреса что хранится в Excel файле, я получаю следущего вида значения: '|C:><5;>|.|.'

В чём причина, где я допускаю ошибку, или собственно что вообще делаю не так? Буду рад любому совету или ответу =)

Процедура импорта:
Код:
Procedure TExcelToolsDataModule.ImportAdresses(ExcFile: String);
Var
  i,j,x: Integer;
  I_,J_: Integer;
  Cell1,Cell2: TCellIndex;
begin                               
  //MailBotForm.Memo4.Lines.Clear;
  ExcelApplication.Connect;
  ExcelApplication.Workbooks.Add(ExcFile,1);
  Cell1 := GetCellIndex(1,1);
  I:=0;
  MailBotForm.StringGrid1.CleanupInstance;
  MailBotForm.StringGrid1.RowCount := 0;
  ExcelApplication.cells.specialcells(xlcelltypelastcell,emptyparam).activate;
  x := ExcelApplication.activecell.row;
  MailBotForm.ProgressBar1.Visible := True;
  While I<X do
    begin
      Try
        If (ExcelApplication.Range[Cell1,Cell1].Value2 = null) then Continue;
      Except
      End;
      MainDM.HaveDuplicate.Close;
      Cell1 := GetCellIndex(2,I+1);
      MainDM.HaveDuplicate.Parameters.ParamByName('Name').Value := VarToStr(ExcelApplication.Range[Cell1,Cell1].Value2);
      MainDM.HaveDuplicate.Open;
      If MainDM.HaveDuplicate.RecordCount = 0 then
        begin
          Cell1 := GetCellIndex(1,I+1);
          MailBotForm.StringGrid1.Cells[0,I] := ExcelApplication.Range[Cell1,Cell1].Value2;
          //MailBotForm.Memo4.Lines.Add(IntToStr(I+1)+' - '+MailBotForm.StringGrid1.Cells[0,I]+' - '+MailBotForm.StringGrid1.Cells[1,I]);
          MailBotForm.StringGrid1.Cells[3,I] := IntToStr(I+1);
          Cell1 := GetCellIndex(2,I+1);
          MailBotForm.StringGrid1.Cells[1,I] := ExcelApplication.Range[Cell1,Cell1].Value2;
          Cell1 := GetCellIndex(3,I+1);
          MailBotForm.StringGrid1.Cells[2,I] := ExcelApplication.Range[Cell1,Cell1].Value2;
          MailBotForm.StringGrid1.RowCount := MailBotForm.StringGrid1.RowCount + 1;
          //If Not MailBotForm.CheckBox2.Checked then
           { For I_:= 1 to I do //Проверяем на повторяющиеся адреса.
              begin
                If ((MailBotForm.StringGrid1.Cells[0,I_] = MailBotForm.StringGrid1.Cells[0,I])
                  and (MailBotForm.StringGrid1.Cells[1,I_] = MailBotForm.StringGrid1.Cells[1,I])) and (I_<>I) then
                  begin
                    MessageDlg('Внимание! Есть повторяющиеся адреса! ('+MailBotForm.StringGrid1.Cells[0,I]+')',mtWarning,[mbOK],0);
                    MailBotForm.ProgressBar1.Visible := False;
                    Exit;
                  end;
              end;  }
        end;
      MailBotForm.ProgressBar1.Position :=  (I * 100) div X;
      Inc(I);
      MailBotForm.StaticText1.Caption := 'Количество адресов: '+ IntToStr(I);
    end;
    ExcelApplication.Workbooks.Close(1);
    ExcelApplication.Disconnect;
    MailBotForm.ProgressBar1.Visible := False;
end;
Вложения
Тип файла: rar ExcelToolsDM.rar (2.3 Кбайт, 29 просмотров)
__________________
"Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт