powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / vfp-excel
8 сообщений из 8, страница 1 из 1
vfp-excel
    #33247489
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую такой метод записи в 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, но там надо файлы формировать, а потом устанавливать ширину столбцов. долго получается.
...
Рейтинг: 0 / 0
vfp-excel
    #33247521
Razorvfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://support.microsoft.com/?scid=kb;en-us;252615&spid=7992&sid=global

скачай отсюда прогу и посмотри как выполняется форматирование таблицы
...
Рейтинг: 0 / 0
vfp-excel
    #33247571
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,'.',',')
...
Рейтинг: 0 / 0
vfp-excel
    #33248350
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 один и тот же столбец по разному.
...
Рейтинг: 0 / 0
vfp-excel
    #33248935
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри что у тебя в региональных настройках компа (разделитель целой и дробной части, разделитель тетрад). Зачем менять "." на "," ?
...
Рейтинг: 0 / 0
vfp-excel
    #33249634
Ilhom_uz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Set point to ","
...
Рейтинг: 0 / 0
vfp-excel
    #33249746
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема не в том, что не определен разделительный знак . или , а в том, что при передаче в Ex одни числа передаются правильно, а другие (иногда) неправильно. из 200-300 записей выбираются определенные поля (количество, цена, считается сумма) и пишутся в Ex. Проблема в том, что 5-10 записях цена или количество оказываются как бы умноженными на 1000. в основном это каксется целых чисел, но иногда и десятичных дробей типа 32,80. а за set point спасибо не подумал. и вообще это уже второй глюк при таком способе заполнения ex. первый уже не помню торопился и быстро перевел на addquery.
...
Рейтинг: 0 / 0
vfp-excel
    #33250026
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все то же саме, что тебе уже сказали, но более подробно.

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

"123456,789"

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

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

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

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

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

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

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

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
* Создаем объект 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 определяет символы разделители троек цифр, а также целой и дробной части из региональных настроек. Чтобы не мучаться с определением этих настроек следует ПЕРЕД формированием текстовой строки сделать примерно следующее

Код: plaintext
1.
2.
3.
SET SYSFORMATS ON 
s1 = STR(...)
SET POINT TO
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / vfp-excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]