Метод вставки данных в Excel через Range

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Всем привет! Помогите разобраться в чем загвоздка... Есть поле базы данных с типом String[50] в нем хранится номер расчетного счета, т.е. 20 чисел.
Делаю следующее:

Код: Выделить всё


var i,j: integer;
    FData: Variant;
    Sheet,Range: Variant;
.....

  FData:=VarArrayCreate([1,dm1.DBInfo.RecordCount,1,dm1.DBInfo.FieldCount],varVariant);
 //заполняем массив данными из ADO таблицы
  for i:=1 to VarArrayHighBound(FData,1) do
   begin
    for j:=1 to VarArrayHighBound(FData,2) do
     begin
      FData[i,j]:=dm1.DBInfo.Fields.Fields[j-1].Value;
      If (dm1.DBInfo.Fields.Fields[j-1].DataType=ftString) or (dm1.DBInfo.Fields.Fields[j-1].DataType=ftWideString) then  // проверяю что поле текстовое
       FData[i,j]:=' '+dm1.DBInfo.Fields.Fields[j-1].Text; // добавляю символ пробела к началу значения 

      If dm1.DBInfo.Fields.Fields[j-1].DataType=ftBoolean then // проверяю тип поля 
       begin
        If dm1.DBInfo.Fields.Fields[j-1].Value=true then FData[i,j]:='Да'; //заменяю значение
        If dm1.DBInfo.Fields.Fields[j-1].Value=false then FData[i,j]:='Нет';
       end;
     end;
     dm1.DBInfo.Next;
   end;


 //активируем
 Sheet:=ExcelApp.ActiveWorkBook.Sheets[1];
 Sheet.Activate;

 for i:=0 to DM1.DBInfo.FieldCount-1 do
  sheet.cells[1,i+1]:=DM1.DBInfo.Fields.Fields[i].DisplayName; //Вставляю заголовки колонок таблицы

 //выделяем диапазон для вставки данных
 Range:=Sheet.Range[Sheet.Cells[2,1],Sheet.Cells[VarArrayHighBound(FData,1)+1,VarArrayHighBound(FData,2)]];

 Range.Value:=FData; // вставляю данные
Проблема в том что в Excel из 20 знаков передаются 15 цифр а 5 цифр заменены на 0
т.е. счет имеет вид 43534534534534534534 а вставляется в Excel 43534534534534500000

Пробовал метод
FData[i,j]:=dm1.DBInfo.Fields.Fields[j-1].AsString; - не канает...

Где собака зарыта? в массиве или в Excel? Забыл сказать еще - перед номером нет пробела который я упорно пишу к значению....
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

УРа! Нашел решение проблемы вроде )))

Sheet.range[Sheet.Cells[2,1],Sheet.Cells[VarArrayHighBound(FData,1)+1,VarArrayHighBound(FData,2)]].NumberFormat := '@';
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить