powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять MS Excel
12 сообщений из 12, страница 1 из 1
Опять MS Excel
    #36864450
ping_09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.Вопрос такой.
Использую .interior.Color,
чтобы считать цвет ячейки в таблицу .dbf в числовом виде при импорте.
Но при экспорте в таблицу .xls выясняется,что .interior.Color не понимает
этого значения и окрашивает ячейку в белый цвет.
Если присвоить
.interior.Color=13434828,
то нормально получается.
Но при
.interior.Color=16777164,
этот цвет уже не обрабатывает, вываливается в белый.
Есть какое-то ограничения, после которых цвета не распознаются?
...
Рейтинг: 0 / 0
Опять MS Excel
    #36865377
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
oExcel = CreateObject('Excel.Application')
oBooks = oExcel.Workbooks.Add()
oBooks.ActiveSheet.Cells( 1 , 1 ).Interior.Color = Rgb( 204 , 255 , 255 )  &&  16777164 
oExcel.Visible = .T.

Нормально окрасилась ячейка в голубой цвет. Ищите ошибку в своем коде. Возможно, Вы потом просто затираете этот фон какими-либо еще настройками.
...
Рейтинг: 0 / 0
Опять MS Excel
    #36866853
если делать так:
oBooks.ActiveSheet.Cells(1,1).Interior.Color = 16777164

то фон ячейки окрашивается в белый цвет в офисе 2003, при этом в офисе 2010 все замечательно.
похоже на баг офиса 2003.
...
Рейтинг: 0 / 0
Опять MS Excel
    #36866920
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я проверял как раз в Excel 2003. Ищите ошибку у себя. Вы пробовали запустить приведенный код? Ошибка воспроизводится?
...
Рейтинг: 0 / 0
Опять MS Excel
    #36867257
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЯ проверял как раз в Excel 2003. Ищите ошибку у себя. Вы пробовали запустить приведенный код? Ошибка воспроизводится?
Я подозреваю, что это связано с ограничением офиса 2003 на палитру. Если задавать не через Interior.ColirIndex, а через Interior.Color, цвет пытается прописаться в палитру. При этом, длина палитры, если не ошибаюсь, 48 цветов.

Похоже, слишком много цветов использовано в книге.
...
Рейтинг: 0 / 0
Опять MS Excel
    #36867953
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin PahanВладимирМЯ проверял как раз в Excel 2003. Ищите ошибку у себя. Вы пробовали запустить приведенный код? Ошибка воспроизводится?
Я подозреваю, что это связано с ограничением офиса 2003 на палитру. Если задавать не через Interior.ColirIndex, а через Interior.Color, цвет пытается прописаться в палитру. При этом, длина палитры, если не ошибаюсь, 48 цветов.
Насколько я понимаю, не совсем так. В случае задания цвета через RGB() Excel ищет ColorIndex палитры, максимально близкий к заданному цвету. И уже его и использует.

Код: plaintext
1.
2.
3.
4.
5.
6.
oExcel = CreateObject('Excel.Application')
oBooks = oExcel.Workbooks.Add()
oBooks.ActiveSheet.Cells( 1 , 1 ).Interior.Color = Rgb( 204 , 255 , 255 )  &&  16777164 
?"ColorIndex = ", oBooks.ActiveSheet.Cells( 1 , 1 ).Interior.ColorIndex
?"Color = ", oBooks.ActiveSheet.Cells( 1 , 1 ).Interior.Color
oExcel.Visible = .T.

В данном случае получаем абсолютное попадание. ColorIndex = 20, и Color - не изменился. Но если чуть изменить значение RGB()

Код: plaintext
1.
2.
3.
4.
5.
oExcel = CreateObject('Excel.Application')
oBooks = oExcel.Workbooks.Add()
oBooks.ActiveSheet.Cells( 1 , 1 ).Interior.Color = Rgb( 200 , 255 , 255 )  &&  16777160 
?"ColorIndex = ", oBooks.ActiveSheet.Cells( 1 , 1 ).Interior.ColorIndex
?"Color = ", oBooks.ActiveSheet.Cells( 1 , 1 ).Interior.Color
oExcel.Visible = .T.

То видим, что после присвоения ColorIndex = 20, а вот Color изменился и стал равен 16777164, а не заданному 16777160

Так что, очевидно, что никаких глюков нет. Это проблема программы. Где-то, что-то "намудрили" в коде
...
Рейтинг: 0 / 0
Опять MS Excel
    #36867955
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в Excel можно настроить палитру

Сервис \ Параметры \ закладка "Цвет"

Посмотрите, может, там кто-то изменил палитру?
...
Рейтинг: 0 / 0
Опять MS Excel
    #36868778
Нет, палитру никто не трогал, в программе тоже нормально все, никаких затираний нету, потому как на 2010 офисе отрабатывает замечательно. Алгоритм наипростецкий - приходит файл эксель, там куча разноцветных строк, все это дело делится на отдельные листы экселя с сохранением цвета строк. Брал входящий файл, прямо в нем создаю макрос, который показывает цвет ячейки, потом присваиваю этот цвет другой ячейки и она окрашивается в белый фон.
В общем, решили не цвет фона считывать (.Color), а .ColorIndex, и тогда в 2003 все стало нормально раскрашиваться, как и в исходном файле.
...
Рейтинг: 0 / 0
Опять MS Excel
    #36868812
Fffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На другом принтере попробуйте.
...
Рейтинг: 0 / 0
Опять MS Excel
    #36869480
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз повторю вопрос. Вы тестировали в своем "простом коде" или все-таки запустили приведенный здесь пример из 3 строчек прямо в командном окне FoxPro? Т.е. проводили ли тест

1. Вне зависимости от шаблона Excel (если таковой был)
2. Вне зависимости от программного кода FoxPro

Первое, что делается в подобных случаях, это "чистый" тест. Максимально независимый от чего-либо. Если он проходит успешно, значит, проблемы в Вашем коде. Если ошибка, значит проблема "внешняя".

То, что Вы сделали сейчас, это "сунули голову в песок". Нашли обход, не поняв причину проблемы. Как следствие, подобная проблема "догонит" Вас в самое ближайшее время где-то еще. В каком-то новом виде. Опять будете искать "обход"
...
Рейтинг: 0 / 0
Опять MS Excel
    #36869511
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знакомый ping_09Алгоритм наипростецкий - приходит файл эксель, там куча разноцветных строк, все это дело делится на отдельные листы экселя с сохранением цвета строк. Брал входящий файл, прямо в нем создаю макрос, который показывает цвет ячейки, потом присваиваю этот цвет другой ячейки и она окрашивается в белый фон.
Как присваивали-то? Надеюсь, прямым присвоением, а не через посредника?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub test()
    ' Окрашиваю первую ячейку
    ActiveSheet.Cells(1, 1).Interior.Color = 16777164
    ' Записываю полученный код в соседнюю ячейку
    ActiveSheet.Cells( 1 ,  2 ).Value = ActiveSheet.Cells( 1 ,  1 ).Interior.Color
    ' Повторяю окраску следующей ячейки
    ActiveSheet.Cells( 2 ,  1 ).Interior.Color = ActiveSheet.Cells( 1 ,  1 ).Interior.Color
End Sub

Все нормально работает в Excel 2003 SP3
...
Рейтинг: 0 / 0
Опять MS Excel
    #36869633
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Все нормально работает в Excel 2003 SP3
Он по листам раскидывает. Может еще и в другую книгу. Если так, то вдруг у него палитры разные в разных книгах.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять MS Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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