Проблема с MS Word Cell.FitText
От: iLLL  
Дата: 24.06.10 07:43
Оценка:
Добрый день!
Имею к уважаемому сообществу два вопроса.

Есть документ с ячейками, в которых есть текст, не помещающийся в этих ячейках (в некоторые помещается, в некоторые нет).
Задача — вписать текст если он не влазит.
Из приложения на C# выполняется следующая автоматизация:

var cell = ...
var scaling1 = cell.Range.Font.Scaling; // обычно 100
cell.FitText = true; // ворд вписывает текст в ячейку: если текст не влазит - уменьшается масштаб текста, иначе - увеличивается интервал между букв, чтобы текст был вровень с ячейкой.
var scaling2 = cell.Range.Font.Scaling; // если текст не влазил и был вписан, масштаб становится меньше, например 90, иначе остается таким же, как и был ранее.
object undoNum = 1;
if (scaling2 >= scaling1) document.Undo(ref undoNum);


Другого способа проверять влазит ли текст в ячейку, кроме как вписывать его и проверять scaling (если влазит — выполнять undo) я не нашел.
Вопрос 1: кто-нибудь сталкивался с подобной задачей и как её решал (способом, отличным от приведенного)?

Всё вроде бы ок, работает, да не трожь. НО! Наткнулся на следующую проблему:
иногда, в определённых ячейках scaling2 (=cells.Range.Font.Scaling) возвращает 100 (масштаб не уменьшен), даже, если текст не влазил в ячейку и масштаб реально был уменьшен (FitText).
Опытным путём выяснил, что это как-то связано с тем, что FitText = true отрабатывает асинхронно (предположение) и проблема решается, если вставить после выполнения этой команды паузу:

var cell = ...
var scaling1 = cell.Range.Font.Scaling;
cell.FitText = true;
System.Threading.Thread.Sleep(500);
var scaling2 = cell.Range.Font.Scaling;
object undoNum = 1;
if (scaling2 >= scaling1) document.Undo(ref undoNum);


Случается это не со всеми ячейками, в которые не влазит текст, а только с некторыми, в которых, по-видимому операция FitText = true занимает большее время.
Вопрос 2: сталкивался ли кто-нибудь с подобной проблемой и как обошел?

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.