Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Уважаемые Форумчане!

Экспортирую таблицу из SQL Server'a через Delphi в Excel 2007. Все экспортируется как положенно, но вот постоянная проблема с датами. Экспортирую я помассивно. Все элементы массива типа Variant. Но есть одна проблема, при экспорте формат ячейки в которую экспортируется дата меняется неизвестно от чего, то она текстовая, то числовая. Но вот отображение её всегда в числовом виде.

Проблему удалось решить преобразуя все даты в строки, все отображается корректно, но опять же не хочу это так оставлять, т.к. возможно пользователю понадобится сделать фильтр по месяцу, или же использовать дату в ячейке для вычислений каких нибудь, а там текст - а это не есть хорошо.

Надеюсь что кто нибудь сталкивался с подобной проблемой и поможет мне разобраться в данной ситуации
7 дек 10, 15:58    [9899946]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Johnmen
Member

Откуда: Москва
Сообщений: 3951
Для "русского" Экселя:
Range.NumberFormat:='ДД.ММ.ГГГГ';
Range.Value:=<переменная типа TDate/TDateTime>;
А вообще, гуги на тему NumberFormat.
8 дек 10, 15:20    [9905677]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Johnmen,

нет, не катит, я как только не пробовал, не проканало
8 дек 10, 17:09    [9906569]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 6919
vgorshkov
Но есть одна проблема, при экспорте формат ячейки в которую экспортируется дата меняется неизвестно от чего, то она текстовая, то числовая. Но вот отображение её всегда в числовом виде.
Слабо верится. Пример можешь выложить?
8 дек 10, 17:48    [9906905]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
данные также передавать как строка, просто формат ячейки в самом excel устанавливать не "общий", а "дата"
8 дек 10, 20:37    [9907608]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 6919
Данные нужно передавать как даты, в том числе принудительно задавать VarType.
Не исключено, что в этом и суть проблемы: после каких-то манипуляций данные становятся типа Double.
8 дек 10, 20:56    [9907664]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
Соколинский Борис
Данные нужно передавать как даты, в том числе принудительно задавать VarType.
Не исключено, что в этом и суть проблемы: после каких-то манипуляций данные становятся типа Double.
А это в Экселе установлен "стандартный" формат ячеек
8 дек 10, 21:12    [9907721]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 6919
[quot GatorА это в Экселе установлен "стандартный" формат ячеек[/quot]
Нет, я имел в виду что-то типа этого
var X: variant;
X:=now; // VarType(X)=varDate
X:=now+1; //VarType(X)=varDouble
Не исключено, что у автора что-то подобное происходит.
Стандартный формат отображает даты как даты.
8 дек 10, 22:37    [9907918]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
Соколинский Борис
Gator
А это в Экселе установлен "стандартный" формат ячеек

Нет, я имел в виду что-то типа этого
var X: variant;
X:=now; // VarType(X)=varDate
X:=now+1; //VarType(X)=varDouble
Не исключено, что у автора что-то подобное происходит.
Стандартный формат отображает даты как даты.
IMHO ну их. Даже без Delphi при копировании/импорте в Excel бывало, что среди дат вдруг лезут "DateTime as Double" или "Integer as Date".
Так что у меня рефлекс: хочешь дату - установи формат
9 дек 10, 00:19    [9908154]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
MMM_Corp
Member

Откуда: Тернопіль, Україна
Сообщений: 2097
возможно оно вам и не надо, но напишу:

1. выборку данных с MSSQL сервака в езель можно делать напрямую - Данные, с сервера SQL...
2. можно сам екзель использовать как СУБД (г.. конечно, но можно,), при этом не надо думать над форматами данных ячеек
9 дек 10, 06:36    [9908395]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Соколинский Борис,

    RowCount:=frmMultTrans.ReportBase.RecordCount+7;
    ColCount:=frmMultTrans.ReportHeader.RecordCount+1;
    row_count_all:=row_count_all+frmMultTrans.ReportBase.RecordCount;

    if max_col_count<ColCount then max_col_count:=ColCount;

    frmMultTrans.ReportHeader.First;
    while not frmMultTrans.ReportHeader.Eof do begin
      Workbook.ActiveSheet.Range[chr(frmMultTrans.ReportHeader.RecNo+1+64)+inttostr(pos+3)+':'+chr(frmMultTrans.ReportHeader.RecNo+1+64)+inttostr(pos+rowcount)].Select;
      if frmMultTrans.ReportHeader.FieldByName('align').AsString='L' then
        Excel.Selection.HorizontalAlignment := 1;
      if frmMultTrans.ReportHeader.FieldByName('align').AsString='C' then
        Excel.Selection.HorizontalAlignment := 3;
      if frmMultTrans.ReportHeader.FieldByName('align').AsString='R' then
        Excel.Selection.HorizontalAlignment := 4;

      if frmMultTrans.ReportHeader.FieldByName('type').AsString='S' then
        Excel.Selection.NumberFormat := '@';
      if frmMultTrans.ReportHeader.FieldByName('type').AsString='I' then
        Excel.Selection.NumberFormat := '# ##0';
      if frmMultTrans.ReportHeader.FieldByName('type').AsString='F' then
        Excel.Selection.NumberFormat := '# ##0'+SysUtils.DecimalSeparator+'00';
      if frmMultTrans.ReportHeader.FieldByName('type').AsString='A' then
        Excel.Selection.NumberFormat := '# ##0'+SysUtils.DecimalSeparator+'000';

      frmMultTrans.ReportHeader.Next;
    end;

    sum_kl2:=0;

    ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
    frmMultTrans.ReportHeader.First;
    while not frmMultTrans.ReportHeader.Eof do begin
      ArrayData[6,frmMultTrans.ReportHeader.RecNo+1]:=frmMultTrans.ReportHeader.FieldByName('new_header').AsString;
      frmMultTrans.ReportHeader.Next;
    end;

    frmMultTrans.ReportHeader.First;
    for j:=2 to ColCount do begin
      frmMultTrans.ReportBase.First;
      sum_kl:=0;
      for i:=7 to RowCount-1 do begin

        if frmMultTrans.ReportHeader.FieldByName('type').AsString='I'
          then ArrayData[i, j]:=frmMultTrans.ReportBase.FieldByName(frmMultTrans.ReportHeader.FieldByName('header').AsString).AsInteger
        else
        if frmMultTrans.ReportHeader.FieldByName('type').AsString='F'
          then ArrayData[i, j]:=frmMultTrans.ReportBase.FieldByName(frmMultTrans.ReportHeader.FieldByName('header').AsString).AsFloat
        else
        if frmMultTrans.ReportHeader.FieldByName('type').AsString='A'
          then ArrayData[i, j]:=frmMultTrans.ReportBase.FieldByName(frmMultTrans.ReportHeader.FieldByName('header').AsString).AsFloat
        else
        if frmMultTrans.ReportHeader.FieldByName('type').AsString='D'
          then ArrayData[i, j]:=frmMultTrans.ReportBase.FieldByName(frmMultTrans.ReportHeader.FieldByName('header').AsString).AsDateTime
        else
          ArrayData[i, j]:=frmMultTrans.ReportBase.FieldByName(frmMultTrans.ReportHeader.FieldByName('header').AsString).AsString;

        if frmMultTrans.ReportHeader.FieldByName('can_sum').AsBoolean
          then sum_kl:=sum_kl+frmMultTrans.ReportBase.FieldByName(frmMultTrans.ReportHeader.FieldByName('header').AsString).AsVariant;
        frmMultTrans.ReportBase.Next;
      end;
      if frmMultTrans.ReportHeader.FieldByName('can_sum').AsBoolean
        then ArrayData[RowCount, j]:=sum_kl;
      if frmMultTrans.ReportHeader.FieldByName('can_sum_avr').AsBoolean then begin
        sum_kl_all:=sum_kl_all+sum_kl;
        sum_kl2:=sum_kl;
      end;
      frmMultTrans.ReportHeader.Next;
    end;
    for i:=7 to RowCount-1 do begin
      ArrayData[i, 1]:=i-6;
    end;

    ArrayData[1,1]:=ColCount;
    ArrayData[2,1]:=RowCount-7;
    ArrayData[3,1]:=sum_kl2;
    if BlanksBase.FieldByName('lang_id').AsInteger=1 then begin
      ArrayData[4,1]:=ansiuppercase(RoubleUnit.RealToRouble(sum_kl2,
        ValyutaBase.FieldByName('valyuta_text_rus').AsString, ValyutaBase.FieldByName('valyuta_end').AsBoolean,
        ValyutaBase.FieldByName('cent_text_rus').AsString, ValyutaBase.FieldByName('cent_end').AsBoolean, ValyutaBase.FieldByName('dop').AsString));
      ArrayData[5,1]:=frmMultTrans.AnyQuery.FieldByName('inv_text').AsString;
      ArrayData[6,1]:='¹';
    end else
    if BlanksBase.FieldByName('lang_id').AsInteger=2 then begin
      ArrayData[4,1]:=ansiuppercase(RoubleUnit.RealToDollars(sum_kl2,
        ValyutaBase.FieldByName('valyuta_text_eng').AsString,
        ValyutaBase.FieldByName('cent_text_eng').AsString))+' ONLY';
      ArrayData[5,1]:=frmMultTrans.AnyQuery.FieldByName('inv_text').AsString;
      ArrayData[6,1]:='#';
    end;

    Cell1 := WorkBook.WorkSheets[1].Cells[pos+1, 1];
    Cell2 := WorkBook.WorkSheets[1].Cells[pos+RowCount, ColCount];
    Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
    Range.Value := ArrayData;
9 дек 10, 10:09    [9908897]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
vgorshkov, многа букаф Без намека на даты
9 дек 10, 10:15    [9908940]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Gator,

    if ReportHeader.FieldByName('type').AsString='D' then
      Excel.Selection.NumberFormat := 'ДД.ММ.ГГГГ';

вот если так сделать, то все работает как положено, но...если у пользователя Excel английский или еще какой нибудь? как определить какой именно формат здесь приемлемо использовать?
9 дек 10, 10:45    [9909135]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
vgorshkov, http://www.delphikingdom.com/asp/viewitem.asp?catalogid=920
9 дек 10, 10:53    [9909183]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62926
vgorshkov
Gator,

    if ReportHeader.FieldByName('type').AsString='D' then
      Excel.Selection.NumberFormat := 'ДД.ММ.ГГГГ';

вот если так сделать, то все работает как положено, но...если у пользователя Excel английский или еще какой нибудь? как определить какой именно формат здесь приемлемо использовать?

Для локализованых Экселей положено использовать NumberFormatLocal
9 дек 10, 11:04    [9909257]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Gator,

function XL_GetShortDateFormat(XLApp: ExcelApplication): String;
var d, m, y: Integer;
begin
  if XLApp.International[xlDayLeadingZero, lcid]
    then d := 2 else d := 1;
  if XLApp.International[xlMonthLeadingZero, lcid]
    then m := 2 else m := 1;
  if XLApp.International[xl4DigitYears, lcid]
    then y := 4 else y := 2;
  Result := Format('%1:s%0:s%2:s%0:s%3:s', [
    DateSeparator,
    StringOfChar(VarToStr(XLApp.International[xlDayCode, lcid])[1], d),
    StringOfChar(VarToStr(XLApp.International[xlMonthCode, lcid])[1], m),
    StringOfChar(VarToStr(XLApp.International[xlYearCode, lcid])[1], y)
  ]);
end;

пытался использовать функцию указанную в этой статье, дает ошибку:
'(' expected but '[' found

а что за ошибка, я не могу понять...не учили нас такому в Туркмении :(
9 дек 10, 11:31    [9909490]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Anatoly Podgoretsky,

просвятите пожалуйста, что значит локализованная эксель? это значит что настройки региональные отличаются от глобальных? или как? я пробовал гуглить на эту тему, ничего не нашел
9 дек 10, 11:35    [9909537]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
vgorshkov, А ты не используй TExcelApplication, а используй нормальную COM/OLE
9 дек 10, 11:55    [9909712]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 6919
vgorshkov,
В твоем коде слишком много мест, где может быть ошибка.
Давай так: берешь простой пример, который работает:
+
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, ComObj, Variants, ActiveX;

Const
  CellCount=100;

var
  XL, WB, Data: OleVariant;
  i: integer;

begin
  CoInitialize(nil);

  XL:=CreateOleObject('Excel.Application');
  try
    try
      XL.DisplayAlerts:=False;

      WB:=XL.WorkBooks.Add;

      data:=varArrayCreate([0,CellCount-1,0,0], varVariant);

      for I:=0 to cellCount-1 do
        Data[i,0]:=VarAsType( Random(37000){дата} + Random {время}, varDate);

      WB.ActiveSheet.Cells[1,1].Resize[CellCount,1].Value:=Data;

      XL.Visible:=true;

    except
      XL.Quit;
      Raise;

    end;
  finally
    XL:=null;
  end;
end.
пошагово добавляешь свои примамбасы и выясняешь в какой момент работать перестанет.
Так быстрее ошибку найдем
9 дек 10, 12:17    [9909950]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62926
vgorshkov
Anatoly Podgoretsky,

просвятите пожалуйста, что значит локализованная эксель? это значит что настройки региональные отличаются от глобальных? или как? я пробовал гуглить на эту тему, ничего не нашел

Зачем же используешь не локализованую версию. Она же только для английского.
автор
Returns or sets the format code for the object as a string in the language of the user.

Почему ты вводишь локализированый формат для английских пользователей
автор
если у пользователя Excel английский или еще какой нибудь?

Думаешь оно понимает ДД.ММ.ГГГГ
Для ДД.ММ.ГГГГ существует NumberFormatLocal, а не NumberFormat
9 дек 10, 13:52    [9910901]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
уважаемые, я наверное не совсем понимаю что нужно делать, я поставил проверку такого типа:

    if ReportHeader.FieldByName('type').AsString='D' then
      Excel.Selection.NumberFormatLocal := 'ДД.ММ.ГГГГ';

т.е. если тип Дата, то преобразовать в дату, все работает прекрасно, но как сделать чтобы это работало независимо от версии Excel?

Статьи которые Вы предлогали я прочел, пробовал использовать функции которые там описаны, но они ничего хорошего мне непринесли, дают ошибки непонятного для меня характера. Может кто знает где можно про все это дело почитать в подробностях?
9 дек 10, 16:17    [9911957]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 6919
vgorshkov
т.е. если тип Дата, то преобразовать в дату, все работает прекрасно, но как сделать чтобы это работало независимо от версии Excel?
Из дельфей не сделаешь, поскольку мелкомягкие не доделали это место для Automation и неизвестно когда доделают. Только макросом.
9 дек 10, 16:42    [9912152]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62926
vgorshkov
уважаемые, я наверное не совсем понимаю что нужно делать, я поставил проверку такого типа:

    if ReportHeader.FieldByName('type').AsString='D' then
      Excel.Selection.NumberFormatLocal := 'ДД.ММ.ГГГГ';

т.е. если тип Дата, то преобразовать в дату, все работает прекрасно, но как сделать чтобы это работало независимо от версии Excel?

Статьи которые Вы предлогали я прочел, пробовал использовать функции которые там описаны, но они ничего хорошего мне непринесли, дают ошибки непонятного для меня характера. Может кто знает где можно про все это дело почитать в подробностях?

Попробуй в NumberFormat указать 'dd.mm.yyyy' и проверить на русской локализации.
9 дек 10, 17:04    [9912363]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Anatoly Podgoretsky,

попробовал, вместо всех дат пишет dd.mm.yyyy
9 дек 10, 17:05    [9912381]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 6919
В Excel-e есть древний баг: когда через Automation задаешь Range.NumberFormat на самом деле отрабатывает Range.NumberFormatLocal. Лечится либо макросом, либо шаблоном с форматированием (условным форматированием).
9 дек 10, 17:50    [9912864]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
Соколинский Борис
В Excel-e есть древний баг: когда через Automation задаешь Range.NumberFormat на самом деле отрабатывает Range.NumberFormatLocal. Лечится либо макросом, либо шаблоном с форматированием (условным форматированием).
Вроде как в 2007 Офисе его исправили? Проверить не могу.
9 дек 10, 17:57    [9912947]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 6919
Gator
Вроде как в 2007 Офисе его исправили? Проверить не могу.
Я могу. Не исправили.
9 дек 10, 18:23    [9913163]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
Соколинский Борис
Gator
Вроде как в 2007 Офисе его исправили? Проверить не могу.
Я могу. Не исправили.
Вот засада! Неужели придется проверять в Documents to Go?
9 дек 10, 18:52    [9913312]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Gator
Member

Откуда: Москва
Сообщений: 13809
Соколинский Борис
Gator
Вроде как в 2007 Офисе его исправили? Проверить не могу.
Я могу. Не исправили.
Вот засада! Неужели придется проверять в Documents to Go?
9 дек 10, 18:53    [9913318]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
Antoshka
Member

Откуда:
Сообщений: 828
Попробуй для конвертирования форматной строки дельфи в Excel следующий код:

class function tExcelHelper.ConvertFormatString(const DelphiFormatString: string;
    ExcelApp: variant): string;
  var
    i: integer;
    s: string;
begin
  s:= '';

  for i:= 1 to Length(DelphiFormatString) do
    case UpCase(DelphiFormatString[i]) of
      '/': s:= s + VarToStr(ExcelApp.International[xlDateSeparator]);
      ':': s:= s + VarToStr(ExcelApp.International[xlTimeSeparator]);
      'D': s:= s + VarToStr(ExcelApp.International[xlDayCode]);
      'M': s:= s + VarToStr(ExcelApp.International[xlMonthCode]);
      'Y': s:= s + VarToStr(ExcelApp.International[xlYearCode]);
      'H': s:= s + VarToStr(ExcelApp.International[xlHourCode]);
      'N': s:= s + VarToStr(ExcelApp.International[xlMinuteCode]);
      'S': s:= s + VarToStr(ExcelApp.International[xlSecondCode]);
      ',': s:= s + VarToStr(ExcelApp.International[xlThousandsSeparator]);
      '.': s:= s + VarToStr(ExcelApp.International[xlDecimalSeparator]);
    else
      s:= s + DelphiFormatString[i];
    end;

  Result:= s;
end;

У меня работает на всех версиях Excel, начиная с 2003. (Ниже просто не проверял).

Единственное, нужно всегда указывать формат выводимого значения иначе будут траблы с автоподбором формата. Для строк указывать текстовый формат '@'
10 дек 10, 09:00    [9915031]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
vgorshkov
Member

Откуда: Ашгабат, Туркменистан
Сообщений: 95
Antoshka,

Благодарю, теперь все работает. Функция - супер
10 дек 10, 09:29    [9915149]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: не понятно как экспортировать даты в Excel  [new]
MrDeadgott
Member

Откуда:
Сообщений: 2
Добрый день. Суть проблемы. Передаю данные из Delphi в Exel. Причём в заранее созданную книгу. У меня в БД Delphi порядка 78 записей, а в Exel передаёт только 29. Почему? Помогите пожалуйста. Вот обработчик сего действия:

procedure TForm1.Button9Click(Sender: TObject);
var
a,b: Integer;
ExApp, WB, WS: Variant;
begin
ExApp:=CreateOleObject('Excel.Application');
WB:=ExApp.WorkBooks.Open('C:\Users\Вассська\Desktop\База данных\База данных(1)\данные1(1).xlsm');
WS := ExApp.Workbooks[1].WorkSheets[1];
with TMyDBGrid(DBGrid1).DataLink do
begin

for a:=0 to (RecordCount-1) do
begin
ActiveRecord:=a;
for b:=0 to (FieldCount-1) do
begin
WS.Cells[a+2, b+1].Value:=Fields[b].AsString;
end;
end;
ExApp.Visible:=true;
end;

end;


Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
15 янв 14, 17:34    [15420385]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
MrDeadgott
with TMyDBGrid(DBGrid1).DataLink do

Должно быть DBGrid1.DataSet и перед этим вызов DBGrid1.DataSet.First, а потом цикл while not DBGrid1.DataSet.Eof с DBGrid1.DataSet.Next в теле цикла.
15 янв 14, 18:24    [15420742]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
MrDeadgott
Member

Откуда:
Сообщений: 2
wadman
MrDeadgott
with TMyDBGrid(DBGrid1).DataLink do

Должно быть DBGrid1.DataSet и перед этим вызов DBGrid1.DataSet.First, а потом цикл while not DBGrid1.DataSet.Eof с DBGrid1.DataSet.Next в теле цикла.


Дружище, напиши пожалуйста этот код. Я уже 15 дней насилую мозг этой бд(почти круглосуточно)=(
Буду премного благодарен
15 янв 14, 19:22    [15421035]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
MrDeadgott, см 15428963
17 янв 14, 12:05    [15429018]     Ответить | Цитировать Сообщить модератору
 Re: не понятно как экспортировать даты в Excel  [new]
user89
Member

Откуда:
Сообщений: 2070
MrDeadgott,

на всякий случай
Sheet.Range['A2', EmptyParam].CopyFromRecordset(ADOQuery1.Recordset, EmptyParam, EmptyParam);
17 янв 14, 13:09    [15429570]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: не понятно как экспортировать даты в Excel  [new]
Sevolod
Member

Откуда:
Сообщений: 105
А кто-нибудь сталкивался вот с чем.

Если экспортировать из Delphi в Excel дату без времени, то установка
.NumberFormat := 'ДД/ММ/ГГГГ'
помогает. Месяц и день местами не меняются. А если экспортировать дату со временем, то
.NumberFormat := 'ДД/ММ/ГГГГ ЧЧ:ММ:СС'
не помогает. Месяц и день местами меняются.
10 авг 15, 12:31    [17998129]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: не понятно как экспортировать даты в Excel  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 43623
Antoshka
Попробуй для конвертирования форматной строки дельфи в Excel следующий код:

class function tExcelHelper.ConvertFormatString(const DelphiFormatString: string;
    ExcelApp: variant): string;
  var
    i: integer;
    s: string;
begin
  s:= '';

  for i:= 1 to Length(DelphiFormatString) do
    case UpCase(DelphiFormatString[i]) of
      '/': s:= s + VarToStr(ExcelApp.International[xlDateSeparator]);
      ':': s:= s + VarToStr(ExcelApp.International[xlTimeSeparator]);
      'D': s:= s + VarToStr(ExcelApp.International[xlDayCode]);
      'M': s:= s + VarToStr(ExcelApp.International[xlMonthCode]);
      'Y': s:= s + VarToStr(ExcelApp.International[xlYearCode]);
      'H': s:= s + VarToStr(ExcelApp.International[xlHourCode]);
      'N': s:= s + VarToStr(ExcelApp.International[xlMinuteCode]);
      'S': s:= s + VarToStr(ExcelApp.International[xlSecondCode]);
      ',': s:= s + VarToStr(ExcelApp.International[xlThousandsSeparator]);
      '.': s:= s + VarToStr(ExcelApp.International[xlDecimalSeparator]);
    else
      s:= s + DelphiFormatString[i];
    end;

  Result:= s;
end;


У меня работает на всех версиях Excel, начиная с 2003. (Ниже просто не проверял).

Единственное, нужно всегда указывать формат выводимого значения иначе будут траблы с автоподбором формата. Для строк указывать текстовый формат '@'
спасибо
4 дек 17, 12:48    [21004016]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить