Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.09.2008, 18:35
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию БД Access и Excel

Такая проблема, аксесс БД, там есть числовое поле. В делфи прога которая добавляет, редактирует эти данные. Вобщем когда вводишь в edit с числовым полем число где нули вначале(типа 003), они обрезаются и сохраняется только 3. Я изменил поле на текстовое тогда всё ок. Но при транспортировке в Excel, нули обрезаются там). Как сделать чтоб нули перед числом сохранялись в том и в другом случае?
Доп. вопрос, когда в Excel переносишь точка заменяется на запятую, можно исправить?
Ответить с цитированием
  #2  
Старый 30.09.2008, 10:26
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

Вот код экспорта в Excel там всё объявленно как Variant,и значит если в значении только цифры он распознаёт его как число и обрезает нули слева(да?), как изменить чтоб этого небыло?
Код:
procedure TMainForm.Button1Click(Sender: TObject);
var
 XLApp,Sheet,Colum:Variant;
begin
 XLApp:= CreateOleObject('Excel.Application');
 XLApp.Visible:=true;
 XLApp.Workbooks.Add(-4167);
 XLApp.Workbooks[1].WorkSheets[1].Name:='татата';
 Colum:=XLApp.Workbooks[1].WorkSheets['татата'].Columns;
 XLApp.WorkBooks[1].WorkSheets[1].Range['B1:E1'].Merge;

 Colum.Columns[1].ColumnWidth:=10;
 Colum.Columns[2].ColumnWidth:=10;

 Colum:=XLApp.Workbooks[1].WorkSheets['татата'].Rows;
 Colum.Rows[1].Font.Bold:=true;
 Colum.Columns[1].font.Bold:=true;

 XLApp.WorkBooks[1].WorkSheets[1].Columns[1].HorizontalAlignment := 4;
 XLApp.WorkBooks[1].WorkSheets[1].Columns[4].HorizontalAlignment := 4;

 Sheet:=XLApp.Workbooks[1].WorkSheets['татата'];
 Sheet.Cells[1,2]:='татата';
 Sheet.Cells[3,1]:=татата';

   Sheet.Cells[1,6]:=DataModule2.ADOQuery1.Fields.Fields[1].AsString;
   Sheet.Cells[3,2]:=DataModule2.ADOQuery1.Fields.Fields[2].AsString;

end;
Ответить с цитированием
  #3  
Старый 30.09.2008, 12:24
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Укажи варианту явно что это не число, а строка.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 30.09.2008, 15:49
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

Aristarh Dark
А по подробней как сделать?
Тут что поставить?
Код:
Sheet.Cells[1,6]:=DataModule2.ADOQuery1.Fields.Fields[1].AsString;
Ответить с цитированием
  #5  
Старый 30.09.2008, 19:00
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Сделай запись макроса в экселе когда меняешь тип ячейки с "общий" на "текстовый". Посмотри в макросе какие свойства ячейки меняются. Изменяй их таким же образом из своей программы при перегрузке данных.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #6  
Старый 30.09.2008, 21:09
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

Это намного упростило задачу). Постараюсь так если полегче никак.
Ответить с цитированием
  #7  
Старый 30.09.2008, 21:17
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

Нашёл:
Цитата:
При записи текста, содержащего одни цифры, Excel пытается его преобразовать в число. Чтобы избажать такой "помощи" со стороны Excel'я, перед записью в ячейку установите в свойство NumberFormat текстовый формат или добавьте перед текстом символ апострофа "'" (код символа 39).
Код:
S := '000069987';
    // установим текстовый формат перед записью в ячейку
    with ASheet.Range['A1', EmptyParam] do begin

      NumberFormat := '@';
      Formula := S;
    end;
    // или добавим перед текстом апостроф - результат тот же и даже быстрее работает
    // так как не приходится изменять свойство NumberFormat
    ASheet.Range['A2', EmptyParam].Formula := #39 + S;
Т.е. просто
Код:
Sheet.Cells[1,6]:=#39+DataModule2.ADOQuery1.Fields.Fields[1].AsString;
Ответить с цитированием
  #8  
Старый 10.02.2009, 17:06
Ikrik Ikrik вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Qwed86
Вот код экспорта в Excel там всё объявленно как Variant,и значит если в значении только цифры он распознаёт его как число и обрезает нули слева(да?), как изменить чтоб этого небыло?
Код:
procedure TMainForm.Button1Click(Sender: TObject);
var
 XLApp,Sheet,Colum:Variant;
begin
 XLApp:= CreateOleObject('Excel.Application');
 XLApp.Visible:=true;
 XLApp.Workbooks.Add(-4167);
 XLApp.Workbooks[1].WorkSheets[1].Name:='татата';
 Colum:=XLApp.Workbooks[1].WorkSheets['татата'].Columns;
 XLApp.WorkBooks[1].WorkSheets[1].Range['B1:E1'].Merge;

 Colum.Columns[1].ColumnWidth:=10;
 Colum.Columns[2].ColumnWidth:=10;

 Colum:=XLApp.Workbooks[1].WorkSheets['татата'].Rows;
 Colum.Rows[1].Font.Bold:=true;
 Colum.Columns[1].font.Bold:=true;

 XLApp.WorkBooks[1].WorkSheets[1].Columns[1].HorizontalAlignment := 4;
 XLApp.WorkBooks[1].WorkSheets[1].Columns[4].HorizontalAlignment := 4;

 Sheet:=XLApp.Workbooks[1].WorkSheets['татата'];
 Sheet.Cells[1,2]:='татата';
 Sheet.Cells[3,1]:=татата';

   Sheet.Cells[1,6]:=DataModule2.ADOQuery1.Fields.Fields[1].AsString;
   Sheet.Cells[3,2]:=DataModule2.ADOQuery1.Fields.Fields[2].AsString;

end;


Вот этот же код на delphi 2009 экспорт на Excel 2003 дает ошибку...

---------------------------
Debugger Exception Notification
---------------------------
Project Spravochnik_proj.exe raised exception class EOleError with message 'Method 'WorkSheets' not supported by automation object'.
---------------------------
Break Continue Help
---------------------------

в чем может быть проблема?
__________________
ТОТ, КТО ДУМАЕТ, ЧТО МОЖЕТ ОБОЙТИСЬ
БЕЗ ДРУГИХ, ОШИБАЕТСЯ;
НО ТОТ, КТО ДУМАЕТ, ЧТО ДРУГИЕ НЕ
МОГУТ ОБОЙТИСЬ БЕЗ НЕГО,
ОШИБАЕТСЯ ЕЩЕ СИЛЬНЕЕ.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter