Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Borland C++ Builder

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 25.10.2012, 09:40   #1
Неактивный пользователь
 
Пол:Мужской
Регистрация: 31.07.2011
Сообщений: 1
Репутация: 0
По умолчанию Из DBGrid в Excel: эксель отбрасывает часть данных

выгружаю данные в эксель из DBGrida
PHP код:
 int f4_SaveToExcel(){//Экспорт всех ячеек в Excel
TBookmark bm;
int result,colrow;
Screen->Cursor=crHourGlass;
Application->ProcessMessages();
result=f4_ExcelInit("");//Инициализация Excel
if(result==-1){Screen->Cursor=crDefault;return -1;}
Form4->DBGrid1->DataSource->DataSet->DisableControls();
bm=Form4->DBGrid1->DataSource->DataSet->GetBookmark();//Текущая ячейка
Form4->DBGrid1->DataSource->DataSet->First();
for(
col=0;col<Form4->DBGrid1->FieldCount;col++){//добавляем имена колонок
 
result=f4_ExcelSend(1,col+1,1,Form4->DBGrid1->Fields[col]->DisplayLabel,true);
 if(
result==-1){Screen->Cursor=crDefault;return -1;}
 }
Form4->ProgressBar1->Position=0;//Прогрессбар
Form4->ProgressBar1->Max=Form4->DBGrid1->DataSource->DataSet->RecordCount;
for(
row=0;row<Form4->DBGrid1->DataSource->DataSet->RecordCount;row++){// получаем данные
 
Form4->ProgressBar1->Position=row;//Прогрессбар
 
for(col=0;col<Form4->DBGrid1->FieldCount;col++){
   
result=f4_ExcelSend(1,col+1,row+2,Form4->DBGrid1->Fields[col]->AsWideString,true);
   if(
result==-1){Screen->Cursor=crDefault;return -1;}
   }
 
Form4->DBGrid1->DataSource->DataSet->Next();
 }
Form4->DBGrid1->DataSource->DataSet->GotoBookmark(bm);//Текущая ячейка
Form4->DBGrid1->DataSource->DataSet->FreeBookmark(bm);
Form4->DBGrid1->DataSource->DataSet->EnableControls();
f4_ExcelVisible(true);//Сделать видимым Excel
Form4->ProgressBar1->Position=0;//Прогрессбар
Screen->Cursor=crDefault;
Application->ProcessMessages();
return 
1;
}
//---------------------------


//===============================================
int f4_ExcelInit(UnicodeString File){//Подключение к Excel
try{//Если Excel запущен - подключиться к нему
  
XLSAPP=Variant::GetActiveObject("Excel.Application");}
catch (...){
//Если Excel не запущен - запустить его
  
try{XLSAPP=Variant::CreateObject("Excel.Application");}
  catch (...){
    
Application->MessageBox(L"Невозможно открыть Microsoft Excel."
    
L"Возможно, Excel не установлен на компьютере.",L"Ошибка",MB_OK+MB_ICONERROR);}
  }
try{
 if(
File!=""){
    
XLSAPP.OlePropertyGet("WorkBooks").OleProcedure("Open",File.w_str());}//Открыть документ
 
else XLSAPP.OlePropertyGet("WorkBooks").OleProcedure("add");//Создать новый документ
 
}
catch (...){
 
Application->MessageBox(L"Ошибка открытия файла Microsoft Excel.",
                         
L"Ошибка",MB_OK+MB_ICONERROR);return -1;}
return 
1;
}
//===============================================
int f4_ExcelVisible(bool i){//Показать/скрыть Excel
if(!XLSAPP.IsEmpty())XLSAPP.OlePropertySet("Visible",i);
return 
1;
}
//===============================================
int f4_ExcelSend(int Sheetint Stolbint StrokaUnicodeString Strbool asText){//>>>
Variant ExcelSheet,Cur;//Запись данных в Excel (Лист, столбец, строка, "данные",как_текст?)
UnicodeString ErrStr;
asText false;
if(
Str=="")return 1;//Не писать "пустоту"
ErrStr=L"Ошибка при записи: лист "+IntToStr(Sheet)+", столбец "+IntToStr(Stolb)+", строка "+IntToStr(Stroka);
try{
ExcelSheet=XLSAPP.OlePropertyGet("WorkSheets",Sheet);}
catch (...){
Application->MessageBox(ErrStr.c_str(),
           
L"Ошибочный номер листа Microsoft Excel",MB_OK+MB_ICONERROR); return -1;}
XLSAPP.OlePropertyGet("Range""A1:K1000").OlePropertySet("WrapText"true);
XLSAPP.OlePropertyGet("Range""A1:K1000").OlePropertySet("ColumnWidth"15);
try{
Cur=ExcelSheet.OlePropertyGet("Cells",Stroka,Stolb);
   if(
asText)Cur.OlePropertySet("NumberFormat","@");//Форматировать ячейку как текст
   
Cur.OlePropertySet("Value",Str.w_str());
   }
catch (...){
Application->MessageBox(ErrStr.w_str(),
           
L"Ошибка Microsoft Excel",MB_OK+MB_ICONERROR); return -1;}
return 
1;

Проблема: в эксел попадают "урезанные" данные, например в DBGrid значение ячейки 591145001, в экселе эта ячейка имеет значение 59114.
пробовал менять формат вот здесь:
PHP код:
if(asText)Cur.OlePropertySet("NumberFormat","@");//Форматировать ячейку как текст
   
Cur.OlePropertySet("Value",Str.w_str());} 
вместо @ пробовал как число, и пустые кавычки ставлял - результат тот же.
если я все правильно понимаю, формат данных в DBGrid задается здесь
PHP код:
for(row=0;row<Form4->DBGrid1->DataSource->DataSet->RecordCount;row++){// получаем данные
 
Form4->ProgressBar1->Position=row;//Прогрессбар
 
for(col=0;col<Form4->DBGrid1->FieldCount;col++){
   
result=f4_ExcelSend(1,col+1,row+2,Form4->DBGrid1->Fields[col]->AsString,true);
   if(
result==-1){Screen->Cursor=crDefault;return -1;} 
т.е. AsString.
Почему все же эксел "отбрасывает" часть данных?
Как исправить?
Pepis вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: заказать билеты в театрNP730QFG-KA2USsipassИнтеграция SendPulse и WhatsAppкупить бескаркасную мебель в москве


Старый 26.10.2012, 19:47   #2
BookkeeperW
Пользователь
 
Пол:Мужской
Регистрация: 26.03.2008
Сообщений: 67
Репутация: 28
По умолчанию Re: Из DBGrid в Excel: эксель отбрасывает часть данных

Преобразуй данные при выгрузке функцией WideString(твои данные)...
Должно работать!

Последний раз редактировалось BookkeeperW; 26.10.2012 в 19:50..
BookkeeperW вне форума
 
Ответить с цитированием Вверх
Старый 12.02.2013, 23:51   #3
Dimon184
Неактивный пользователь
 
Пол:Мужской
Регистрация: 02.05.2008
Сообщений: 5
Репутация: 0
По умолчанию Re: Из DBGrid в Excel: эксель отбрасывает часть данных

Можно использовать EhLib как альтернативу. Там есть компонент для экспорта в эксель
Dimon184 вне форума
 
Ответить с цитированием Вверх
Старый 27.05.2013, 11:48   #4
Alex_Dar
Новичок
 
Пол:Мужской
Регистрация: 27.05.2013
Адрес: Russia, Penza
Сообщений: 16
Репутация: 2
По умолчанию Re: Из DBGrid в Excel: эксель отбрасывает часть данных

Наверное, уже не актуально, но все же напишу: необходимо преобразовать в Builder данные в текстовый формат, а затем выгружать в Excel.
Alex_Dar вне форума
 
Ответить с цитированием Вверх
Ответ

Опции темы
Опции просмотра

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из dbgrid в excel sirkey Базы данных 23 18.04.2013 13:50
Считывание данных из Excel moxdv Visual C++ / С/C++ 0 01.12.2009 12:25
dbgrid как в 1c табличная часть справочника?? ch_vas Delphi 2 13.08.2007 08:45
ПДФ формат в Эксель. Как? Артефакт Архив 4 23.02.2007 14:39

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 13:27. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.15360 секунды с 11 запросами