|
05.09.2012, 12:16 | #1 |
Участник
|
Ошибка вставки из textBuffer в Excel
Добрый день! Следующая проблема:
В Цикле заполняю, строку необходимой мне информацией, затем строку помещаю в textBuffer, затем конструкцией X++: excelDocument.insertText("A1", texBuffer, 1) пробовал просто заполнять строку просто тестовым набором букв! Результат такой же! Всё это я делаю в методе fetch одно аксаптовского отчёта - хотят чтобы он дублировался в Excel. В код метода insertText() я не лазил и ничего там не менялось! может кто чем помочь? Спасибо! |
|
05.09.2012, 13:24 | #2 |
Мрачный тип
|
Я делаю через класс TextBuffer - формирую текстовку, потребную к вставке, вызываю у него метод toClipBoard() (копирование в системный буфер обмена) и потом, обращаясь к методу pasteSpecial() у COM-объекта Range, передаю в Excel
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
05.09.2012, 14:20 | #3 |
Участник
|
Придется залезть и сравнить с тем, что написано здесь
http://forum.mazzy.ru/index.php?showtopic=385 Метод insertText() не является "стандартным" методом в том смысле, что в исходной поставке его нет. Это "самописка", вероятно, на основе кода, указанного по ссылке.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
05.09.2012, 14:29 | #4 |
Участник
|
Я попробовал быстренько тестовый job прогнать на этом же приложении! Всё отлично работает, т.е. пишу текст в строковую переменную, запихиваю в буфер, пишу в Ексель, всё теми же самыми методами! т.е. причина не в тексте метода. Но если честно понимания всё равно нет :-(
|
|
05.09.2012, 15:22 | #5 |
Участник
|
В тексте, в тексте. Вы сравните, что написано у Вас и что написано по приведенной выше ссылке. Заодно почитайте в комментариях в каких случаях могут возникнуть проблемы и как их лечить.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
05.09.2012, 15:37 | #6 |
Участник
|
Спасибо что откликнулись. Сравнил у меня текст в точности такой же, я заменил 0 на 1 в pasteSpecial(), всё так же (((
Я сейчас даже попробовал в в своём примере заменить содержимое просто на текст. Результат тот же самый! Хотя если делать всё через джоб всё работает прекрасно! Заметил одну особенность ,если буфер вообще не заполнять, то в Excel вообще не попадает ничего! А если хотя бы в буфере есть 1 символ, то выводится содержимое буфера обмена! |
|
05.09.2012, 15:42 | #7 |
Участник
|
А не может ли этого быть из-за того что всё это я пытаюсь проделать в методе fetch отчёта??? Может он как то влияет на поведение буфера обмена? Хотя в коде я ни чего подобного не нашёл.
|
|
05.09.2012, 16:00 | #8 |
Участник
|
Вообще-то, по ссылке приведены 3 варианта текста. "Точно такой же" - это какой из них?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
05.09.2012, 16:10 | #9 |
Участник
|
У меня ваш вариант! Я попробовал менять 1 в pasteSpecial на 0, эффекта нет. Повторюсь: у меня много отчётов работает по такому же принципу на этом же приложении и ни в одном такого глюка нет. А именно в этом месте появляется! Причём абсолютно не важно что я пытаюсь вывести в Ексель, всё равно выводится содержимое "общего" буфера.
|
|
06.09.2012, 03:30 | #10 |
Участник
|
Скорее всего Ваш отчет выполняется на стороне сервера. Класс TextBuffer имеет свойство RunOn = Called from, и соответственно если в отчете создать экземпляр класса, он будет выполняться на сервере. Класс ComExcelDocument_RU имеет свойство RunOn = Client и всегда выполняется на клиенте.
Таким образом делая excelDocument.insertText("A1", texBuffer, 1) получается что Вы копируете содержимое textBuffer в буфер обмена сервера, а выводите в эксель содержимое буфера обмена клиента. Как вариант решения проблемы можно создать наследника класса TextBuffer, со свойством RunOn = Client, и использовать его. |
|
|
За это сообщение автора поблагодарили: rumpleteazer (1), JuniorAx (1). |
23.10.2013, 23:11 | #11 |
Участник
|
Цитата:
X++: curBuffer = new TextBuffer();
curBuffer.setText(_text.getText());
curBuffer.toClipboard() X++: _text.toClipboard()
__________________
С уважением, Rumpleteazer. |
|
05.09.2012, 16:01 | #12 |
Участник
|
Кстати, для справки. Job всегда выполняется на стороне клиента. А где выполняется Ваш код? Если это класс, то какое у него значение свойства RunOn?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
05.09.2012, 16:09 | #13 |
Ищущий знания...
|
Цитата:
P.S. сорри за оффтоп...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.03.2014, 18:17 | #14 |
Участник
|
X++: "pasteSpecial" COM- "_Worksheet" 0x800A03EC (<>), : PasteSpecial Worksheet . Когда запускаем на клиенте - отрабатывает нормально, на сервере не хочет работать вставка через буфер, почему? |
|