Имеется модуль. Исходник
тут.
Использовал для импорта из 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;