Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 vfp-excel  [new]
glamis
Member

Откуда:
Сообщений: 603
Использую такой метод записи в Excel

s1=strt(kodp+' '+kodas+c9+Cennik.nam_price+c9+allt(str(Cennik.ves_st,10,3))+c9+allt(str(_v,10,3))+c9,'.',',')
s2=strt(allt(str(sum_n/_v,10,2))+c9+allt(str(sum_f/_v,10,2))+c9+;
allt(str(H0001.rasc/1000*Cennik.ves_st*_normotc*_premi,10,2))+c9+c9+allt(str(ass_buh2.cena1*1.18,10,2)), '.', ',')
_cliptext=s1+s2
XlSheet.cells(_baza+__i,1).pastespecial


Проблема вот в чем в некоторые поля, например, где Ctnnik.ves_st = 1, в Ex пишется вместо 1 1000 что очень неприятно.

Может кто сталкивался? Есть вариант перейти на Addquery, но там надо файлы формировать, а потом устанавливать ширину столбцов. долго получается.
2 сен 05, 09:23    [1839330]     Ответить | Цитировать Сообщить модератору
 Re: vfp-excel  [new]
Razorvfp
Member

Откуда:
Сообщений: 29
http://support.microsoft.com/?scid=kb;en-us;252615&spid=7992&sid=global

скачай отсюда прогу и посмотри как выполняется форматирование таблицы
2 сен 05, 09:33    [1839374]     Ответить | Цитировать Сообщить модератору
 Re: vfp-excel  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Скорее всего не 1000 вместо 1, а 1.000 :)
Так ты глянь внимательно на формирование строки (там где выделено).

s1=strt(kodp+' '+kodas+c9+Cennik.nam_price+c9+allt(str(Cennik.ves_st,10,3))+c9+allt(str(_v,10,3))+c9,'.',',')
2 сен 05, 09:53    [1839445]     Ответить | Цитировать Сообщить модератору
 Re: vfp-excel  [new]
glamis
Member

Откуда:
Сообщений: 603
AleksMed
Скорее всего не 1000 вместо 1, а 1.000 :)
Так ты глянь внимательно на формирование строки (там где выделено).

s1=strt(kodp+' '+kodas+c9+Cennik.nam_price+c9+allt(str(Cennik.ves_st,10,3))+c9+allt(str(_v,10,3))+c9,'.',',')


Обрати внимание на strt и в ячейке вместо единицы тысяча! и если бы только в целых числах. в ценах почти всегда правильно, но иногда в 1000 раз больше: например цена 39,80 а в Ex 39 800. файл один, цикл один, а в ex один и тот же столбец по разному.
2 сен 05, 13:57    [1840871]     Ответить | Цитировать Сообщить модератору
 Re: vfp-excel  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Смотри что у тебя в региональных настройках компа (разделитель целой и дробной части, разделитель тетрад). Зачем менять "." на "," ?
2 сен 05, 16:23    [1841811]     Ответить | Цитировать Сообщить модератору
 Re: vfp-excel  [new]
Ilhom_uz
Member

Откуда:
Сообщений: 212
Set point to ","
3 сен 05, 08:21    [1843267]     Ответить | Цитировать Сообщить модератору
 Re: vfp-excel  [new]
glamis
Member

Откуда:
Сообщений: 603
Проблема не в том, что не определен разделительный знак . или , а в том, что при передаче в Ex одни числа передаются правильно, а другие (иногда) неправильно. из 200-300 записей выбираются определенные поля (количество, цена, считается сумма) и пишутся в Ex. Проблема в том, что 5-10 записях цена или количество оказываются как бы умноженными на 1000. в основном это каксется целых чисел, но иногда и десятичных дробей типа 32,80. а за set point спасибо не подумал. и вообще это уже второй глюк при таком способе заполнения ex. первый уже не помню торопился и быстро перевел на addquery.
3 сен 05, 12:57    [1843417]     Ответить | Цитировать Сообщить модератору
 Re: vfp-excel  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Все то же саме, что тебе уже сказали, но более подробно.

Ты формируешь текстовую строку примерно такого вида

"123456,789"

Это соответсвует формату STR(...,10,3)

Посылаешь ее в Excel. А теперь, главный вопрос: как эта символьная строка будет интерпретирована Excel?

По умолчанию, все ячейки Excel имеют формат типа General. Это значит, что при получении информации, Excel попытается сам конвертировать полученную строку в тот тип данных, который он считает "правильным".

Итак, что он видит? Он видит последовательность цифр, разделенных запятой. Одним из возможных способов интерпретации такой последовательности является следующая:

Это число, а запятая - это символ-разделитель троек цифр. Т.е. это примерно такое значение

автор
1,000 следует читать как 1 000


Что, EXCEL с успехом и выполняет.

Как?! Вы этого не хотели? Тогда будьте любезны ПЕРЕД экспортом данных ЯВНО указать Excel в каком формате должны быть данные в его ячейках.

Простейший вариант - это указать символьный тип данных для всех ячеек

* Создаем объект Excel
LOCAL loExcel
loExcel=CREATEOBJECT('Excel.Application')

* Создаем в нем новую рабочую книгу
LOCAL loBook
#DEFINE xlWBATWorksheet -4167
loBook = m.loExcel.workbooks.Add(xlWBATWorksheet)

* Создаем ссылку на новый лист в рабочей книге
LOCAL loSheet
loSheet = m.loBook.Sheets(1)

* Делаем Excel видимым
* Эту команду надо давать в самом конце формирования листа Excel
* здесь она приведена для наглядности
loExcel.Visible= .T.

* ФОРМАТИРУЕМ столбцы листа EXCEL

* Столбец номер 1 с текстовым форматом
m.loSheet.Columns(1).NumberFormat = "@"
* Столбец номер 2 с числовым форматом
m.loSheet.Columns(2).NumberFormat = "#,##0.00"

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

SET SYSFORMATS ON 
s1 = STR(...)
SET POINT TO
3 сен 05, 21:17    [1843913]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить