Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2015, 10:43   #1
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию Экспорт в Excel

Добрый день. Использую базу данных FB. Из нее делаю выборку и пытаюсь запихнуть в Excel. Выяснил что если в поле попадается русские буквы то Excel выдает ошибку содержимого при открытии. Как побороть это, поможите советом.
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 30.04.2015, 10:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А код перетягивания данных покажешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.04.2015, 10:52   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не, не должно быть таких проблем.
Вы покажите код, как Вы выводите данные в Excel, посмотрим, в чём может быть косяк.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.04.2015, 10:59   #4
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Код:
constructor TExportToExcel.Create;
begin
  FExportFile := TXLSExportFile.Create(nil);
end;

procedure TExportToExcel.ExportToExcel(aRecordSet: TIBSQL; aFiltredList: TStringList);
var
  zSheet: TSheet;
  zFileName: string;
  zRow, zCol: integer;
  i: integer;
begin
  if not Assigned(aRecordSet) then Exit;
  zSheet := InitNewSheet('NewSheet', aFiltredList);
  zRow := 1;
  while not aRecordSet.Eof do
  begin
    zCol := 0;
    for i := 0 to aRecordSet.FieldCount - 1 do
    begin
      if aFiltredList.Values[aRecordSet.Fields[i].Name] <> '' then
      begin
        zSheet.Cells[zRow, zCol].Value := aRecordSet.Fields[i].AsString;
        Inc(zCol);
      end
    end;
    inc(zRow);
    aRecordSet.Next;
  end;
  zFileName := 'd:\test.xls';
  FExportFile.SaveToFile(zFileName);
  ShellExecute(0, 'open', PChar(zFileName), nil, nil, SW_SHOW);
end;

function TExportToExcel.InitNewSheet(aName: string; aColumnNames: TStringList): TSheet;
var
  i: integer;
begin
  FExportFile.Workbook.Sheets.Add(_(aName));
  Result := FExportFile.WorkBook.Sheets[FExportFile.WorkBook.Sheets.Count - 1];
  for i := 0 to aColumnNames.Count - 1 do
  begin
    Result.Cells[0, i].FillPattern := xlPatternSolid;
    Result.Cells[0, i].FillPatternBGColorIndex := 15;
    Result.Cells[0, i].Value := aColumnNames.ValueFromIndex[i];
  end
end;
//-----------------------------------
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 30.04.2015, 11:10   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

судя по имени, Вы используете компонент xlsexport (с) SM Software

тогда я ничем не могу помочь, я этот компонент впервые вижу.
Если Вы его купили (компонент судя по всему платный) - обратитесь к разработчиками и/или на их форум.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.04.2015, 11:37   #6
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

думаете проблема в нем? Если сделать через CreateOleObject('Excel.Application' ) поможет? Попробую.
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 30.04.2015, 11:45   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Gregor Посмотреть сообщение
думаете проблема в нем?
на 90% уверен, что в нём.
оставшиеся 10% - другие причины.
Возможно, что глюки компонента можно решить обходным путём (ну, например, русские буквы нужно переводить перед записью в какую-то кодировку, возможно unicode).

попробуйте действительно через OLE. Этот вариант, конечно, имеет свои недостатки, зато и достоинства тоже есть.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.04.2015, 11:49   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Если сделать через CreateOleObject('Excel.Application' ) поможет?
Скажем так сколько я уже пользуюсь CreateOleObject ниразу не было проблем ни с 2003-м ни с 2007-м ни с другими версиями оффиса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.04.2015, 12:20   #9
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

да, с CreateOleObject('Excel.Application' ) выгружает нормально. спасибо!
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 30.04.2015, 13:42   #10
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

по производительности конечно второй метод уступает . на 9 тыс записей 15 секунд против 3,5 минут
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт в Excel Gregor JavaScript, Ajax 5 21.06.2012 14:15
Excel - экспорт выбранной ячейки из DBGrid в Excel. wymkent Помощь студентам 0 16.05.2012 02:10
Экспорт в Excel zingo Помощь студентам 1 26.05.2011 05:33
Экспорт в Excel в БД kuzmich БД в Delphi 11 12.11.2009 11:27
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15