Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как бы экспортнуть из XLS в MDB длинное число? 
V
    Опции темы
Данкинг
Дата 6.10.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Решил в "общие вопросы", поскольку напрямую ни с БД, ни с OLE вопрос не связан. 
Итак, есть лист XLS:
user posted image
В ячейке, как мы, видим, 20-тизначное число. Из этого листа я хочу значение ячеек экспортнуть в MDB:
Код

AdoTable.FieldByName('acnt_numbe').AsString:=vartostr(ex.activeworkbook.activesheet.cells.item[i,8].value);

(ex - это OleObject)
И вот, что получается в результате:
user posted image

Т.е. вопрос, по сути, не в экспорте, как таковом, а в том, как бы получить в переменной типа string значение этого числа из ячейки листа XLS ? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
bems
Дата 6.10.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



если в ячейке не формула, то FormulaR1C1 даст число в первозданном виде


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Данкинг
Дата 6.10.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Спасибо, +1. smile 
Код

ado.FieldByName('ACNT_NUMBE').AsString:=ex.activeworkbook.activesheet.cells.item[i,8].FormulaR1C1;


Это сообщение отредактировал(а) Данкинг - 6.10.2009, 20:18


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Данкинг
Дата 6.10.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



И ещё вопрос по той же теме. Можно ли получить значение в таком же формате, т.е. с разделителями разрядов?
user posted image


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
bems
Дата 6.10.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Руками делай, не сложно ведь.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Данкинг
Дата 6.10.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(bems @  6.10.2009,  22:15 Найти цитируемый пост)
Руками делай, не сложно ведь. 

В смысле, руками? Так разрядность не сохраняется.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
bems
Дата 6.10.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



http://www.freepascal.org/docs-html/rtl/sy...loattotext.html
http://www.freepascal.org/docs-html/rtl/sy...loatformat.html

Добавлено через 4 минуты и 46 секунд
еще есть FloatToStrF. Хелп же есть.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Данкинг
Дата 6.10.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Не, преобразования - это не то уже, тем более в эту FloatToText я как-то пока не врубился. smile Я думал, можно получить именно значение, как оно есть. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 6.10.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Данкинг, а как строку взять не получается?

А вариант, что предложил bems вполне простой:
Код

var
  x: Extended;
begin
  try
    x := 4952321515;
    ThousandSeparator := ' ';
    ShowMessage(FloatToStrF(x, ffNumber, 10, 0));


Это сообщение отредактировал(а) Keeper89 - 6.10.2009, 23:34


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 6.10.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(Keeper89 @  7.10.2009,  00:34 Найти цитируемый пост)
Данкинг, а как строку взять не получается?

Так же:
Код

ado.FieldByName('PHONE').AsString:=vartostr(ex.activeworkbook.activesheet.cells.item[i,20]);

Числа записываются со слитыми цифрами.

Цитата(Keeper89 @  7.10.2009,  00:34 Найти цитируемый пост)
А вариант, что предложил bems вполне простой:

Для "нормальных" чисел (вроде 8 123 801 197 и т.п.) работает. Но в таблице встречаются и пустые, и всякие "000 000 0000", и "---". Ловить ошибку преобразования, получается?

Добавлено через 8 минут и 1 секунду
В общем, сделал таким образом:
Код

        try
          x:=strtofloat(vartostr(ex.activeworkbook.activesheet.cells.item[i,19]));
          temp:=FloatToStrF(x, ffNumber, 10, 0);
         except
          temp:=vartostr(ex.activeworkbook.activesheet.cells.item[i,19]);
         end;
         ado.FieldByName('PHONE').AsString:=temp;

Только это самое... Эта функция, FloatToStrF, надеюсь, всегда нормально будет работать?  smile  smile 
         


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 7.10.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Могу еще вот такое предложить:
Код

function GetParsedPhoneNumber(const num: AnsiString): AnsiString;
const
  T_BREAK = 3;
var
  i: Integer;
  tempV: System.Int64;
begin
  if TryStrToInt64(num, tempV) then
  begin
    Result := '';
    for i := Length(num) downto 1 do
      if ((Length(num) - i + 1) mod T_BREAK = 0) then
        Result := ' ' + num[i] + Result
      else
        Result := num[i] + Result
    end
  else
    Result := num;
end;


Это сообщение отредактировал(а) Keeper89 - 7.10.2009, 00:48


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 7.10.2009, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(Keeper89 @  7.10.2009,  01:48 Найти цитируемый пост)
Могу еще вот такое предложить:

Я так понял, проставление разрядов "вручную"? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 7.10.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Оно самое.


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 7.10.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Нечто такое  я на фоксе писал... Ну ладно, эту тему, думаю, закрываем окончательно. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.