Ограничение копирования в буфер обмена
Как и многие другие вопросы по этой теме, я все еще не нашел что-то, что могло бы избежать моей проблемы.
Я хотел бы знать, каковы ограничения буфера обмена с точки зрения обработки копирования-вставки во времени и ограничения его функциональности копирования-вставки для конкретного использования и идентификатора программы.
Потому что я разрабатывал программное обеспечение для своей компании, которое использует шаблон в Word/Excel и PowerPoint для создания автоматически сгенерированных отчетов, заменяя картинку каждый день и вставляя новый график и изображение, которые есть в шаблоне.
Но, боюсь, потому что, похоже, существуют некоторые ограничения относительно копирования в буфер обмена.
CopyBitmapToClipboard
ActiveWindow.View.PasteSpecial()
Когда я копирую таблицу / изображение в буфер обмена и вставляю его в Word/Excel/PowerPoint, это нормально, но если у меня сейчас есть 10 параллельных отчетов, которые генерируются одновременно, и использую механизм копирования и вставки, то случится так, что он скопирует его в Word/Excel/PowerPoint, который в настоящее время используется другим отчетом.
Принимая во внимание, у меня есть 1 документ, и копия в буфер обмена таблицы, которая является огромной в powerpoint, займет лучший случай за 1 секунду (а не), это будет означать, что за 1 день я могу сгенерировать максимум из
1 copy paste procedure = 1 second
1minute = 60 second means 60 copy paste
1hour = 60min x 60 copy paste
1day = 24hours x 3600 copy paste
Значит, у меня в общей сложности 86400 копий, вставок / отчетов. Что невозможно. На заполнение документа никогда не уходит не менее 1 секунды (для отчетов объемом около 20 страниц, PowerPoint с 30 слайдами, рабочий лист Excel с 6 листами). Как избежать того, что содержимое, скопированное в буфер обмена, будет вставлено в неправильный документ, так как оба документа используют функцию вставки.
Итак, я хотел бы знать, можно ли дать ссылку в мой буфер обмена, чтобы сказать ему, копировать только содержимое внутри его слова /excel/powerpoint, а не копировать то, что я только что скопировал, с помощью CTRL+C и сделать CTRL+V в неправильном документе?
На данный момент у нас есть около 50 отчетов в день для генерации (учитывая, что несколько месяцев назад у нас было 2 отчета для генерации), которые запланированы с интервалом в 5 минут, но что произойдет в тот день, когда у нас будет 86400 ежедневных отчетов для генерировать? Функция копирования-вставки испортит все отчеты и вставит неверный отчет. Я мог бы не быть там, чтобы помочь этому, но я хотел бы предотвратить это воздействие.
Я писал свое программное обеспечение на C#/.NET, но я не могу написать в нем, чтобы отследить, генерируется ли текущее расписание / отчет, потому что я запускаю .bat, который создает отчет с программой, которую я написал.
** Отредактировано: содержимое моего .bat: myprogram.exe /objectsourceprogram="" /sourcefile="my template.doc/xls/ppt" /destinationfile="my destination.doc/xls/ppt"
Я только планирую свой пакетный файл, единственное, что можно сделать, это ждать завершения одного планирования, прежде чем начинать следующий, но это создаст интервалы
1 ответ
Я имел дело с автоматически генерируемыми отчетами в Word и Excel. Вы делаете это медленным способом, не удивительно, что он медленный - взаимодействие.NET COM довольно медленное, поскольку оно само по себе, и тогда ваш процесс использует другие потоки, так что теперь вы должны выполнять сортировку и синхронизацию между потоками, поскольку Office является однопоточным.
Копирование / вставка - это высокоуровневая пользовательская функция, и вы можете использовать ее как хак, но полагаться на нее как на основной способ выполнения вашей задачи - плохой выбор.
Лучший выбор: API-интерфейсы Office (VSTO, кто-нибудь?) - я уверен, что все, что вы придумали с точки зрения отчетов, воспроизводимо с помощью API. Осторожно - слишком много вызовов API, и ваши функции могут работать медленнее.
Лучший выбор: OpenXML SDK. Кривая обучения здесь, вероятно, будет крутой, так как вы все еще используете копирование / вставку, но выгода в том, что время обработки вашего документа будет сокращено на пару порядков.