Вопрос или проблема
У меня есть скрипт IronPython, в котором я заменяю источник данных таблицы.
Вот отрывок из моего кода :
def execute():
memstream = MemoryStream()
memwriter = StreamWriter(memstream)
result_table = []
result_table.append(''.join(map(compare_common_test,common)))
memwriter.Write('\n'.join(result_table))
memwriter.Flush()
memstream.Seek(0, SeekOrigin.Begin)
readerSettings = TextDataReaderSettings()
readerSettings.Separator="\t"
readerSettings.AddColumnNameRow(0)
textDataSource = TextFileDataSource(memstream, readerSettings)
results = Document.Data.Tables["Results"]
Document.Data.Tables["Results"].ReplaceData(textDataSource)
ps = Application.GetService[ProgressService]()
ps.ExecuteWithProgress("Прогресс", "Прогресс", execute)
Когда я добавляю индикатор прогресса для этой функции, появляется всплывающее окно с настройками импорта таблицы данных. Если я не использую индикатор прогресса, этого всплывающего окна нет, а это именно то, что мне нужно.
Знаете ли вы, как я могу убрать это всплывающее окно?
Ответ или решение
Чтобы избежать появления всплывающего окна "Настройки импорта" при замене источника данных в таблице в вашем скрипте IronPython, выполните следующие шаги:
-
Создайте новый источник данных с помощью параметров, соответствующих текущим настройкам таблицы. Замена источника данных без изменения его конфигурации обычно предотвращает появление всплывающих окон.
-
Сделайте замену данных в таблице без использования ProgressService, поскольку это, по всей видимости, инициирует процесс, который вызывает показ окна настроек.
Вот пример, как модифицировать ваш код, чтобы избежать появления всплывающего окна:
def execute():
# Создаем поток памяти и писатель для записи данных
memstream = MemoryStream()
memwriter = StreamWriter(memstream)
# Формируем результаты (предполагается, что compare_common_test и common определены)
result_table = []
result_table.append(''.join(map(compare_common_test, common)))
# Записываем результат в поток
memwriter.Write('\n'.join(result_table))
memwriter.Flush()
memstream.Seek(0, SeekOrigin.Begin)
# Устанавливаем настройки для чтения текстовых данных
readerSettings = TextDataReaderSettings()
readerSettings.Separator = "\t"
readerSettings.AddColumnNameRow(0)
# Создаем источник данных на основе потока
textDataSource = TextFileDataSource(memstream, readerSettings)
# Получаем таблицу результатов
results = Document.Data.Tables["Results"]
# Заменяем данные, избегая всплывающего окна
results.ReplaceData(textDataSource)
# Прямой вызов функции
execute()
Если вам нужно оставить отображение индикатора прогресса, но без всплывающего окна, вы можете обернуть вызов ReplaceData
в другую функцию, которая будет обрабатывать замену данных без взаимодействия с пользователем:
def replace_data_without_popup(data_source):
# Заменяем данные без вызова настроек
Document.Data.Tables["Results"].ReplaceData(data_source)
def execute_with_progress():
memstream = MemoryStream()
memwriter = StreamWriter(memstream)
result_table = []
result_table.append(''.join(map(compare_common_test, common)))
memwriter.Write('\n'.join(result_table))
memwriter.Flush()
memstream.Seek(0, SeekOrigin.Begin)
readerSettings = TextDataReaderSettings()
readerSettings.Separator = "\t"
readerSettings.AddColumnNameRow(0)
textDataSource = TextFileDataSource(memstream, readerSettings)
# Используем ProgressService, но вызываем функцию, которая не вызывает всплывающее окно
ps = Application.GetService[ProgressService]()
ps.ExecuteWithProgress("Progress", "Progress", lambda: replace_data_without_popup(textDataSource))
# Вызов функции с индикатором прогресса
execute_with_progress()
Таким образом, теперь вы избегаете появления всплывающего окна "Настройки импорта" даже при использовании индикатора прогресса. Надеюсь, это поможет решить вашу задачу!