Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием / 16 сообщений из 16, страница 1 из 1
25.05.2007, 12:35:14
    #34550962
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
У меня офис 2002. нижеследующий код нормально отрабатывает, заполняя оба диапазона числами.
Клиент с офисом 2003 (без sp, русский) сообщил, что у него второй цикл всегда дает строковое, а не числовое заполнение ячеек.

Прошу помощи в понимании следующих вопросов:
- это баг непатченной версии или поведение Excel 2003 by design
- как отработает этот код в других версиях – 97-2007

(про версию 2002 достоверно известно, что «правильно» заполняются оба диапазона)

Прошу желающих оказать помощь запустить этот код и сообщить о том, как произошло заполнение диапазонов – оба диапазона содержат числа или один из них оказывается заполненным строками. Прошу указать версию Excel и номер сервис-пака.
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.


я уже не помню/не знаю - были ли в 97м и 2000м
Спасибо всем откликнувшимся

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Sub testFillCellsFromArray()
    Dim oldSep, oldUseSystem
    Dim App As Excel.Application, ws As Worksheet
    
    Set App = Application
    Set ws = ActiveSheet
    
    oldUseSystem = App.UseSystemSeparators
    oldSep = App.DecimalSeparator
    
    App.UseSystemSeparators = False
    App.DecimalSeparator = "."
    
    Dim i&, j&
    ReDim filArray( 0  To  4 ,  0  To  4 )
    For i =  0  To  4 
        For j =  0  To  4 
            filArray(i, j) = "12345.6789"
        Next
    Next
    
    ws.Range(ws.Cells( 2 ,  2 ), ws.Cells( 6 ,  6 )).Value = filArray
       
    App.UseSystemSeparators = False
    App.DecimalSeparator = ","
    ReDim filArray( 0  To  4 ,  0  To  4 )
    
    For i =  0  To  4 
        For j =  0  To  4 
            filArray(i, j) = "12345,6789"
        Next
    Next
    
    ws.Range(ws.Cells( 8 ,  2 ), ws.Cells( 12 ,  6 )).Value = filArray
    
    App.DecimalSeparator = oldSep
    App.UseSystemSeparators = oldUseSystem
    
End Sub
...
Рейтинг: 0 / 0
25.05.2007, 12:37:20
    #34550973
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
хвост предыдущего сообщения должен выглядеть так:

я уже не помню/не знаю - были ли в 97м и 2000м Экселе
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.

Спасибо всем откликнувшимся
...
Рейтинг: 0 / 0
25.05.2007, 12:57:41
    #34551052
GoCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Как вы просили запустил Ваш код, во всех ячейках формат - General
Но когда я переправил формат одного ячейки на текст то при поворном запуске формат остался - текст.
У меня Wind XP sp 2, Office XP
OK?
...
Рейтинг: 0 / 0
25.05.2007, 13:07:12
    #34551088
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
в данном случае формат ячеек подразумевается general или явно выставленный числовой.
...
Рейтинг: 0 / 0
25.05.2007, 13:19:38
    #34551128
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Excel 2007 (Eng), Win 2003 Server (Eng), Regional Settings - Russian

Первый диапазон:
формат ячеек General
внутри строка вида 12345 разделитель 6789 (проверялось с различными разделителями - точка, запятая, буква z), т.е. число

Второй диапазон:
формат ячеек Number
внутри число 123456789
Т.е. десятичный разделитель вообще потерялся. Проверялось опять таки с разными десятичными разделителями.
...
Рейтинг: 0 / 0
25.05.2007, 13:19:54
    #34551130
GioCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
До запуска кода я в ячейках формат не выставлял. После копировяния проверил формат всех ячеик - format cells, при поверке формата ячейк у всех как по умалчанию должно быть - General.
...
Рейтинг: 0 / 0
25.05.2007, 13:22:35
    #34551141
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Victosha я уже не помню/не знаю - были ли в 97м и 2000м Экселе
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.праильно сомлевался
2000 не проглотил
Код: plaintext
1.
'    App.UseSystemSeparators = False
'    App.DecimalSeparator = ","
97-й ,очевидно, тем паче не зъист.
...
Рейтинг: 0 / 0
25.05.2007, 13:29:18
    #34551166
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Excel 2003 (11.8134.8132) SP2
нижний диапазон строками заполнен
...
Рейтинг: 0 / 0
25.05.2007, 13:30:43
    #34551176
GioCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Забыл сообщить, что -
У меня после заполнения ячейк разделител - ","
Reg. setings - Russian
...
Рейтинг: 0 / 0
25.05.2007, 13:31:57
    #34551184
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
4321 Victosha я уже не помню/не знаю - были ли в 97м и 2000м Экселе
App.UseSystemSeparators и App.DecimalSeparator
буду благодарен за уточнение.праильно сомлевался
2000 не проглотил
Код: plaintext
1.
'    App.UseSystemSeparators = False
'    App.DecimalSeparator = ","
97-й ,очевидно, тем паче не зъист.

там что там в 2000м - с таким кодом - чиселки или бузина с капустой?

2ЛП
спасибо. понял. значит 2007 живет здесь по правилам 2003го.

опечалися я вчерась от этого дела сильно.

вот еще приблуда:
0) выставляем разделитель в экселе в "," (запятая)
1) загоняем в клипборд текстовую последовательность "12345,678" & vbtab & "12345,678"
2) встаем в клетку экселя и жмем ctrl-ins
результат - в клетках чиселки (типа ура) и в 2002м и в 2003м

заменяем пункт 2) на код вида
wks.Paste StartCell

в 2002м - по людски чиселки, а в 2003м полное разочарование.

жить с этим можно, конечно. Но как-то безрадостно.
...
Рейтинг: 0 / 0
25.05.2007, 13:34:49
    #34551197
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
vbaproExcel 2003 (11.8134.8132) SP2
нижний диапазон строками заполнен

спасибо.
кажется с 2003м и 7м все уже ясно.
теперь бы понять, как подобное рулится или должно в младших версиях.
...
Рейтинг: 0 / 0
25.05.2007, 13:55:12
    #34551267
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
извините - опечатка.
вместо
автори жмем ctrl-ins

должно быть:
и жмем shift-ins
...
Рейтинг: 0 / 0
25.05.2007, 13:56:53
    #34551274
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Victosha там что там в 2000м - с таким кодом - чиселки или бузина с капустой?
как и ожидалось - ,т.к. разделитель в коде переключить не удаесца - нет таких пимпачкоф у аликуйшена в 2000, то в зависимости от текущих настроек.
при разделителе "тчк" - верхняя половина числеки, при "зпт" - нижняя.
Остальная часть - строчки.
...
Рейтинг: 0 / 0
25.05.2007, 14:05:52
    #34551307
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
4321 Victosha там что там в 2000м - с таким кодом - чиселки или бузина с капустой?
как и ожидалось - ,т.к. разделитель в коде переключить не удаесца - нет таких пимпачкоф у аликуйшена в 2000, то в зависимости от текущих настроек.
при разделителе "тчк" - верхняя половина числеки, при "зпт" - нижняя.
Остальная часть - строчки.

премного спасибо. с этим понятно как жить.
осталось надеятся, что 97й ведет себя также.
вот если еще не затруднит проверить программную вставку из клипборда в 200м... было бы совсем замечтательно...
надеюсь, что там нет разносортицы вставки вручную и кодом.

--------
ЗЫ
конечно, каждая версия имеет право свою правду утверждать.
но правда свежих версий мне нравится меньше всего.

для меня это, пожалуй, ошеломительно разочаровывающее поведение в целом в 2203-2007м.
...
Рейтинг: 0 / 0
25.05.2007, 14:31:22
    #34551409
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
Victoshaосталось надеятся, что 97й ведет себя также.проверил 97. так же.

Victoshaошеломительно разочаровывающее поведение в целом в 2203-2007м.2203- это перебор.
но да, забавно.
Я так понимаю, что вопрос о вставке числе в перемешку со сторками, в случаях, когда тип возврата заранее не известен? А не проще ли пытаться вставить числа как числа? или там идет неявное преобразование в текст?
зы а .Formula вместо Value не спасает?
...
Рейтинг: 0 / 0
25.05.2007, 15:11:31
    #34551609
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием
[quot 4321
Я так понимаю, что вопрос о вставке числе в перемешку со сторками, в случаях, когда тип возврата заранее не известен? А не проще ли пытаться вставить числа как числа? или там идет неявное преобразование в текст?
зы а .Formula вместо Value не спасает?[/quot]

.Formula вместо Value не спасает - это утверждение, а не вопрос.
проверил вчера для .FormulaR1C1

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

третий - текстовый, с тегами типа данных
Разделитель для третьего потока может быть заказан в момент обращения к нему.

По смыслу потоки содержат текст, числа и даты.

сорт потока определяется нормально. Напимер, разделением вызывающих процедур.

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

------------------
Как надежно жить с потоком первого типа, при том, что тип "текущего поля" из потока непосредственно не вычитывается, в версиях 2003 и дальше я пока не знаю.

В общем, тема почти закрыта.
Если бы еще вопрос о вставке из клипборда в версииях 2000 и 2007м
прояснить, было бы совсем здорово.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel. Интернациональная проблема заполнения диапазона из массива. Помогите тестированием / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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