Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2019, 12:12   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Варианты решения.

Вариант 1. открыть файл в Excel, верхнее меню - Формулы - Диспетчер имён.
выделить Print_Titles и нажать кнопку удалить.
disp_names_excel.jpg

Вариант 2.
когда скрипт попросит ввести имя, ввести что-нибудь (например, xx) и Нажать кнопку "Ок".
это нужно сделать один раз и больше не понадобится.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2019, 12:31   #12
Sofya63
Пользователь
 
Регистрация: 10.04.2019
Сообщений: 22
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В том, что вам написал excel сразу. В этом файле определены диапазоны с именами:
<definedName name="Print_Titles" localSheetId="0">'1'!$27:$27</definedName><definedName name="_xlnm.Print_Titles" localSheetId="0">'1'!$27:$27</definedName>
Мне нужно это как-то программно обойти, либо чтобы программа в случае такой ситуации вводила новое имя сама
Изображения
Тип файла: png Конфликт имен.png (16.0 Кб, 131 просмотров)
Sofya63 вне форума Ответить с цитированием
Старый 23.08.2019, 12:39   #13
Sofya63
Пользователь
 
Регистрация: 10.04.2019
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Варианты решения.

Вариант 1. открыть файл в Excel, верхнее меню - Формулы - Диспетчер имён.
выделить Print_Titles и нажать кнопку удалить.
Вложение 97516

Вариант 2.
когда скрипт попросит ввести имя, ввести что-нибудь (например, xx) и Нажать кнопку "Ок".
это нужно сделать один раз и больше не понадобится.
Да, тоже думаю, как вариант переименовать эти диапазоны через диспетчер имён в случае возникновения такой ситуации.
Осталось подумать, как это внести в код)

Последний раз редактировалось Sofya63; 23.08.2019 в 12:42.
Sofya63 вне форума Ответить с цитированием
Старый 23.08.2019, 15:16   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Sofya63 Посмотреть сообщение
Да, тоже думаю, как вариант переименовать эти диапазоны через диспетчер имён в случае возникновения такой ситуации.
Осталось подумать, как это внести в код)
не уверен, что в ваш код изменения внести возможно.

дело в том, что даже одна строчка - открытие файла, уже вызывает это диалоговое окно.

проверьте:
Код:
import os, re
import win32com.client as com_client

print('Тест “.xls, .xlsx”.\
	\nСкрипт должен лежать в той же директории, что и обрабатываемые файлы.\
	\nВажно! Убедитесь, что приложение “Microsoft Excel”  закрыто.\
	\nВ случае неполадок нужно снять задачу “Microsoft Excel”  в диспетчере задач.\n')


#ВЫБИРАЕМ ФАЙЛЫ
folder_path = os.getcwd()
files = list(filter(
	lambda name: name[0] != '.' and 'xls' in name,
	os.listdir(folder_path)
))
files.sort(key=lambda file: list(map(int, re.findall('\d+', file))))


#ВЫПОЛНЯЕМ ПРЕОБРАЗОВАНИЕ НАД ФАЙЛАМИ
Excel = com_client.Dispatch("Excel.Application")
Excel.Visible = True

for file in files:
	wb = Excel.Workbooks.Open(f'{folder_path}/{file}')

	print(f'Файл успешно открыт!')
	
	wb.Close()

Excel.Quit()
input('Операция успешно выполнена! Для выхода нажмите "Enter".')
но, конечно, решение есть.
и даже не одно.

пара вариантов (правда на Delphi) приведено в теме на форуме SQL.ru:
https://www.sql.ru/forum/543092-1/ex...-konflikt-imen

Это, конечно, костыли:
один вариант в цикле ждёт появления окошка "Конфликт имён", вносит туда текст и закрывает его.

другой вариант распаковывает XLSX файл (это по сути переименованный ZIP архив ), находит там файл в папке XL файл workbook.xml, находит там через парсер XML нужное имя и заменяет его на другое, после чего запаковывает файл обратно в XLSX.

предположу, что есть ещё вариант.
написать макрос на VBA и запустить его в Excel - там можно открыть XLSX файл, переименовать нужные (точнее ненужные) имена и сохранить/закрыть файл.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.08.2019, 16:49   #15
Sofya63
Пользователь
 
Регистрация: 10.04.2019
Сообщений: 22
По умолчанию

Эх.. Всё тлен..
Переименование тоже не вариант. Это может повлиять на связанные функции: пропадут сквозные строки, столбцы и т.д.

(Пример сквозной строки во вложении)
Вложения
Тип файла: xlsx 1.xlsx (108.1 Кб, 17 просмотров)
Sofya63 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при копировании листа в excel конфликт имен sls_5 Помощь студентам 0 28.10.2018 15:29
Считывание имён файлов dobrohleb Microsoft Office Excel 21 06.09.2012 11:35
Конфликт при открытии файла версий 2003 в 2007-2010 Excel Blame Microsoft Office Excel 5 28.03.2012 14:15
зависание excel при постоянном обращении к ячейке iamaxl Microsoft Office Excel 1 07.07.2009 18:02
конфликт разделителей чисел при использовании ControlSource (excel + форма vba) alvazor Microsoft Office Excel 2 06.07.2009 12:24