Консультация № 184092
26.09.2011, 08:08
61.49 руб.
0 18 0
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: У меня в программе происходит выгрузка из формы в шаблон Excel, на некоторых компьютерах выдает ошибку "Нельзя установить свойство Size класса Font". В чем может быть ошибка? Причем не зависит от установленного офиса (2003 или 2007). Выгрузка в шаблон происходит так
Код:
  

sh := Form2.ComboBox14.Text;///--Размер шрифта

Ex.ActiveWorkBook.WorkSheets[L1].Range['B26:B43'].Select;
Ex.Selection.Font.Size:=sh;
begin
for i:=0 to Memo1.Lines.Count-1 do
begin
Ex.ActiveWorkBook.WorkSheets[L1].Cells[i+26, 2].value:= memo1.Lines[i];
end;

Где я ошибся?

Обсуждение

давно
Мастер-Эксперт
425
4118
26.09.2011, 08:20
общий
Адресаты:
А Вы, сразу же после этой строки:
sh := Form2.ComboBox14.Text;///--Размер шрифта

проверьте, что у Вас сидит в переменной sh.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Посетитель
352040
133
26.09.2011, 08:32
общий
Проверил. В переменной sh висит выбранный размер шрифта. Какой я выбираю в ComboBox14, такой и остается.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
Неизвестный
26.09.2011, 09:05
общий
26.09.2011, 09:05
Адресаты:
Странно как-то - вроде бы все "ровно". А если попробовать поменять местами: сначала заполнять ячейки, а потом менять размер шрифта?
давно
Мастер-Эксперт
425
4118
26.09.2011, 10:02
общий
Адресаты:
Цитата: Владимир
В переменной sh висит выбранный размер шрифта.

И после того, как в переменной показан размер шрифта, сразу же выдаёт ошибку?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Посетитель
352040
133
26.09.2011, 10:14
общий
На моем компьютере ошибок нет. Ошибки есть у некоторых пользователей. По логу ошибка появляется при попытке указать размер шрифта в Excele
Сделал не большую задержку. У некоторых пропала ошибка. Не думаю что нужно 30 секунд для установки размера в выделенных ячейках.
Код:

Ex.ActiveWorkBook.WorkSheets[L1].Range['B26:B43'].Select;
Sleep (200);
Ex.Selection.Font.Size:=sh;///--Размер шрифта
Sleep (200);
begin
for i:=0 to Memo1.Lines.Count-1 do
begin
Ex.ActiveWorkBook.WorkSheets[L1].Cells[i+26, 2].value:= memo1.Lines[i];
end;
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Мастер-Эксперт
425
4118
26.09.2011, 10:39
общий
Адресаты:
Цитата: Владимир
На моем компьютере ошибок нет. Ошибки есть у некоторых пользователей.

Так Вы и проверяйте размер шрифта у тех пользователей, у кого ошибка выскакивает.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Профессионал
304622
583
26.09.2011, 11:50
общий
Адресаты:
Любопытно, это какая версия Delphi? В 7-м это вообще не компилируется.

И каким типом объявлена переменная sh?
давно
Посетитель
352040
133
26.09.2011, 11:55
общий
Версия Delphi 7. sh у меня оказывается обьявлен как TCaption! Может быть в этом проблема?
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Профессионал
304622
583
26.09.2011, 12:13
общий
26.09.2011, 12:14
Адресаты:
Может быть в этом проблема?


Это первое, что бросается в глаза: ...ComboBox14.Text -- это TCaption, т.е. string, а ...Font.Size -- это integer. Они не должны присваиваться друг в друга. Размер шрифта комбобокса -- это Form2.ComboBox14.Font.Size. Его, собственно, и надо присваивать.

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

Вообще не должно было работать.

И ещё. Правильно ли я понял что Ex -- это TExcelApllication?
давно
Мастер-Эксперт
425
4118
26.09.2011, 12:14
общий
Адресаты:
Цитата: Владимир
sh у меня оказывается обьявлен как TCaption!

Вообще, в sh у Вас заносится не размер шрифта, а текущий текст из ComboBox. Чтобы узнать размер шрифта в ComboBox берите ComboBox.Font.Size.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Посетитель
352040
133
26.09.2011, 12:24
общий
Извиняюсь, отвечу на стразу на оба овета. В ComboBox14.Text у меня выбор размера шрифта (8,9,10,11,12), больше не требуется и получается что sh=8 и т.д. И
Соответсвенно получается что Ex.Selection.Font.Size:=8;///--Размер шрифта


То есть как написал sir Henry
Вообще, в sh у Вас заносится не размер шрифта, а текущий текст из ComboBox. Чтобы узнать размер шрифта в ComboBox берите ComboBox.Font.Size.


Ex -- это да, TExcelApllication
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Мастер-Эксперт
425
4118
26.09.2011, 12:36
общий
Адресаты:
Тогда сделайте так:
Код:
Ex.Selection.Font.Size:=StrToInt(sh);

Или так:
Код:
Ex.Selection.Font.Size:=OleVariant(sh);
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Профессионал
304622
583
26.09.2011, 14:11
общий
Адресаты:
Поясните, пожалуйста. Вы писали:
на некоторых компьютерах выдает ошибку "Нельзя установить свойство Size класса Font"


Это выдаётся при компиляции проекта, ещё до запуска программы на выполнение?

Ещё одно. Вы уверены, что программа с кодом
Код:
Ex.Selection.Font.Size:=sh;
ваша программа успешно компилировалась? Может у вас как-то запускался на выполнение старый exe-шник, в исходном тексте которого не было такой строчки?
давно
Посетитель
352040
133
26.09.2011, 16:05
общий
sir Henry проверяю ваш вариант
Ex.Selection.Font.Size:=StrToInt(sh);


Отпишусь скорее всего завтра. Раньше не успею.

Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Посетитель
352040
133
26.09.2011, 16:10
общий
26.09.2011, 16:12
Сергей Бендер, программа с кодом
Ex.Selection.Font.Size:=sh;
компилируется нормально (Delphi 7), и работает нормально перенос в Excel. На выполнение работает ехе-шник после компиляции. Я так понимаю если будет ошибка, то и компиляции нормальной не будет, и соответсвенно работать программа тоже не будет.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Профессионал
304622
583
26.09.2011, 21:38
общий
Адресаты:
Для меня главная проблема: как этот код вообще скомпилировался. Он в принципе не должен был запуститься на выполнение.

Вариантные типы - в этом вся проблема. Они при компиляции не проверяются на корректность, только при исполнении. У меня есть подозрение, что на разных компах стоит разный Офис и они, соответственно, по разному интерпретируют строку sh.


Так ведь интерпретацией-то sh занимается не Офис, а Дэлфа. А там однозначно: sh - это TCaption(=string) и никаких Variant.

Другое дело, что Ex.Selection.Font.Size может оказаться Variant. Честно, я мало имел дело с TExcelApllication. Странно, что у меня Дэфла вообще отказалась признавать наличие у Ex.Selection свойства Font.
давно
Профессионал
304622
583
26.09.2011, 21:40
общий
Адресаты:
По моему, с самого начала вам стоило выложить весь проект. Что можно было у себя проверить: работает или не работает, компилирует или не компилирует.
Неизвестный
27.09.2011, 10:27
общий
Адресаты:
Конечно с исходным кодом было бы проще разобраться.

В таких случаях можно применить конструкцию:

var:
sh: integer;
...

begin
...
sh:= StrToInt(ComboBox1.Items.Strings[ComboBox1.ItemIndex]);
Ex.Selection.Font.Size:=sh;

...
end;
Форма ответа