powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2007 - Конфликт имен
25 сообщений из 30, страница 1 из 2
Excel 2007 - Конфликт имен
    #35230748
Paparocii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Вот установили новый офисссс.... Тьфу! Ранее при помощи программулины (написана на delphi) открывал excel файл и обрабатывал данные. Теперь же, при открытии файлов формата нового EXCEL (*.xlsx) выскакивает предупреждение " Конфликт имен: Имя не должно совпадать со встроенным именем ". И предлагается ввести новое имя, старое - _filterDatabase

Как с этим боротся?
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #35259978
Nickname_82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня такая же проблема. Скажите, Вы так и не нашли решение данной проблемы?
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #35265796
alex_gearbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaparociiКак с этим боротся?

Сохранять в XLS.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Excel 2007 - Конфликт имен
    #36691865
fdo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fdo
Гость
alex_gearboxPaparociiКак с этим боротся?

Сохранять в XLS.

действительно, при сохранении файла как формата 2003 работает. А что делать, если пользователя нужен именно формат ecxel 2007? Кто-нибудь сталкивался?
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #36748934
Windbloom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда предлагается ввести новое имя, нужно ввести количество символов совпадающим с порядковым номером открытия файла, первый раз открыли книгу - 1 символ, 2 раз - 2 символа и т.д.
Ну а решение проблемы - одно, не использовать зарезервированные имена (в пределах книги) для листов, диапазонов ячеек ит.д.
Чтобы разобраться со своими именами и удобно их переименовать можно воспользоваться удобной настройкой NameManager http://www.oaltd.co.uk/mvp
Если все правильно переименуете, должно все нормально окрываться в 2007 и последующих версиях.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #37062515
_Кэт_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Вам за совет, эта надстройка просто чудо! Неделю искали пути решения проблемы самостоятельно, в итоге решили только с помощью этой надстройки.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #37113269
Lana_Musyaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Кэт_,

Могли бы вы подробнее рассказать, что и как вы делали с этой надстройкой- ничего сама не поняла....
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #37504613
muzikizum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с такой же проблемой, помогли Сведения о синтаксических правилах для имен с http://office.microsoft.com/ru-ru/excel-help/HA010147120.aspx. Обнаружил имя поля "R" в одной из таблиц, которая импортировалась в Access. Заменил на "Rh", проблема решилась.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Excel 2007 - Конфликт имен
    #38090376
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получил БОЛЬШОЙ файл из внешних источников.
Ругается на конфликт имен (print_area).

А как же найти это имя, чтобы его изменить?
Там 60 тыс строк на 30 колонок.


ЗЫ: Хочется прямо ругаться на этих мелкософтовцев. Я ведь ни при чём! Имею что получил.
ЗЫ1: Можно, конечно, записать как excel-2003. Но осадочек-то остается. )
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38458643
Ilias18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я решил проблему так:

При закрытии приложения (FormClose, последняя операция) добавил следующий код:

try
MsExcel.ActiveSheet.Names.Item('_FilterDatabase').Delete;
except end;
MsExcel.ActiveWorkbook.Close;
MsExcel.Application.Quit;


То есть, имя _FilterDatabase удаляется. И работа с фильтрами стала корректной.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38458780
Ilias18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточнение, пропустил одну строку...

При закрытии приложения (FormClose, последняя операция) добавил следующий код:


MsExcel.ActiveSheet.AutoFilterMode:= False;
MsExcel.ActiveWorkbook.Names.Item('_FilterDatabase').Delete;
MsExcel.ActiveSheet.Names.Item('_FilterDatabase').Delete;

MsExcel.ActiveWorkbook.Close;
MsExcel.Application.Quit;

То есть мы программно снимаем автофильтр, и удаляем _FilterDatabase.
У меня работает.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38458945
Ilias18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё уточнение. В общем понял, что нельзя вообще пытаться сохранять файл с включенным автофильтром. Мое приложение использует лист экселя как базу данных, обращается к нему, записывает и сохраняет каждое изменение. Пришлось программно каждый раз снимать автофильтр перед сохранением и восстанавливать его после успешного сохранения файла.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38458984
Ilias18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечное решение

//При открытии книги
MsExcel.ActiveSheet.Range['A3:U3'].Select;
MsExcel.Selection.AutoFilter;

//При закрытии
MsExcel.ActiveSheet.AutoFilterMode:= False;
MsExcel.ActiveWorkbook.Names.Item('_FilterDatabase').Delete;
MsExcel.ActiveWorkbook.Save;
MsExcel.ActiveWorkbook.Close;
MsExcel.Application.Quit;

А при промежуточном сохранении с открытой книгой можно сохранять с активным автофильтром.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38476247
vasyurko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Недавно столкнулся с такой же проблемой и решил поделится решением. В моем случае проблема осложнялась тем, что я загружаю данные из Excel файлов в автоматическом режиме, без участия пользователей. Поскольку Excel я открывал в невидимом режиме, то и возникающего диалогового окна с предложением ввести новое имя вместо _FilterDatabase не было видно. Внешне это выглядело как будто процесс обрабатывающий Excel файлы зависал. На самом деле он ждал ввода в диалоговое окно пользователем. Что интересно, при создании OLE объекта я устанавливаю DisplayAlerts в False.
Итак, решение проблемы.
Данные в XLSX файле хранятся в ввиде набора XML и других файлов упакованных в zip архив. Чтобы убедится в этом, можете сменить расширение XLSX на .zip и открыть любым архиватором. Берем файл, который вызывает ошибку (_FilterDatabase), открываем его архиватором. Нас интересует XML файл XL\workbook.xml. Если посмотреть содержимое этого файла, то можно обнаружить, что
в нем есть два атрибута с именем _FilterDatabase, в моем случае:
Код: xml
1.
2.
<definedName name="_FilterDatabase" localSheetId="0" hidden="1">Лист1!$A$26:$I$26</definedName>
<definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">Лист1!$D$1:$D$272</definedName>


Вот как раз второй атрибут и вызывает ошибку. Если изменить его название или удалить весь тег, то ошибка пропадает.
Итак, алгоритм следующий: Открываем XLSX файл, вытаскиваем из него файл XL\workbook.xml, затем меняем название атрибута "_xlnm._FilterDatabase" на любое другое, запаковываем обратно, открываем Excel файл стандартными средствами. Фрагмент кода реализующий это ниже. Для разархивации использовал бесплатный компонент TZipMaster 1.91.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
function TDSMessageLoader.FixXLSXFile(XLSFileName, TempFolder: String; aZM: TZipMaster; var ErrMsg: String):Boolean;
var XMLDoc, aNode, aNodeList: Variant;
FileName: String;
i: Integer;
begin
  try
  Result := True;
  aZM.Unattended := True;
  aZM.ZipFileName := XLSFileName;
  aZM.ExtrBaseDir := TrimPathDelimiter(TempFolder) + '\';
  aZM.FSpecArgs.Clear;
  aZM.ExtrOptions := [];
  aZM.ExtrOptions := aZM.ExtrOptions + [ExtrDirNames] + [ExtrOverwrite];
  aZM.FSpecArgs.Add('xl\workbook.xml');
  aZM.Extract;

  FileName := aZM.ExtrBaseDir + 'xl\workbook.xml';

  XMLDoc := CreateOleObject('MSXML2.DOMDocument.4.0');
  XMLDoc.async := False;
  XMLDoc.load(FileName);
  XMLDoc.setProperty('SelectionLanguage', 'XPath');
  XMLDoc.SetProperty('SelectionNamespaces', 'xmlns:wrk="http://schemas.openxmlformats.org/spreadsheetml/2006/main"');

  if not (XMLDoc.parseError.reason = '') then raise Exception.Create(XMLDoc.parseError.reason);

  aNodeList := XMLDoc.selectNodes('//wrk:definedName[@name=''_xlnm._FilterDatabase'']');
  if aNodeList.length > 0 then
  begin
    ErrMsg := 'Исправлен атрибут (_xlnm._FilterDatabase) XLS файла ' + XLSFileName;
    aNode := aNodeList.item[0];
    aNode.setAttribute('name', '_xlnm._FilterDatabaseFixed');
    XMLDoc.save(FileName);

    aZM.ZipFileName := XLSFileName;
    aZM.FSpecArgs.Clear;
    aZM.FSpecArgs.Add('workbook.xml');
    aZM.Delete;
    aZM.FSpecArgs.Clear;
    aZM.RootDir := TempFolder;
    aZM.FSpecArgs.Add('\xl\workbook.xml');
    aZM.AddOptions := [];
    aZM.AddOptions := aZM.AddOptions + [AddDirNames] + [AddUpdate]; // Update
    aZM.Add;
    DeleteFile(aZM.ExtrBaseDir + '\xl\workbook.xml');
  end;
  except
    on E: Exception do
    begin
      Result := False;
      ErrMsg := E.Message;
    end;
  end;
end;



Позже я обнаружил что существуют файлы фомата Excel 2003 (.XLS) которые вызывают такую же ошибку при открытии как в Excel 2003, так и в более поздних версиях Excel (у меня Excel 2010). Я не поверил, но проблема решилась переключением интерфейса Excel на русский язык. Сам язык в системе, как и MUI Excel 2010 с русским языком были установлены, но переключить язык интерфейса на русский я забыл. Вот такие танцы с бубном. Надеюсь кому-то пригодится.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38476413
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В модуль книги:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    On Error Resume Next
    Me.Names("_FilterDatabase").Delete
End Sub

Private Sub Workbook_Open()
    On Error Resume Next
    Me.Names("_FilterDatabase").Delete
End Sub
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38476484
vasyurko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kuklp, Ваше решение мне не подходит, т.к. я не смогу заставить всех клиентов, которые присылают мне Excel файлы прописать у себя этот макрос.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38476800
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vasyurko, в теме ведь не только у Вас с этим проблема и кто знает, сколько еще пользователей заглянут в тему с надеждой решить ее :)
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38609278
voronin_2006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vasyurko, спасибо за ценную наводку!!! Целый день думал, что можно сделать. Обидно только, что файлы *.xlsb не обработать подобным методом (файл xml хранится в бинарном виде).
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38611214
Tray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня при открытии файла Excel 2007 ручками никакого вопроса не возникает, однако при открытии через Delphi возникает эта фигота

XLApp:=CreateOleObject('Excel.Application');
XLApp.WorkBooks.Open(OpenDialog1.FileName); // вот после этого возникает ошибка "имя не может совпадать со встроенным именем"

что прописать в Delphi, чтобы эта фигота игнорилась?
все примеры, которые здесь привели, касаются закрытия Excel файла, что мне подходит, макрос я тоже не пропишу в каждый файл.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #38611216
Tray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*все примеры, которые здесь привели, касаются закрытия Excel файла, что мне НЕ подходит, макрос я тоже не пропишу в каждый файл.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Excel 2007 - Конфликт имен
    #39011940
Tray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторPrivate Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
Me.Names("_FilterDatabase").Delete
End Sub

Private Sub Workbook_Open()
On Error Resume Next
Me.Names("_FilterDatabase").Delete
End Sub
как это прописать на Delphi, например?
что такое Me?


я написал так:
авторprocedure TForm1.Button1Click(Sender: TObject);
var
XLApp,xlbook1: variant;
begin
XLApp:=CreateOleObject('Excel.Application');
XLApp.WorkBooks.Open('D:\Workbook1.xlsx');
xlbook1:=xlapp.Workbooks[ ExtractFileName('D:\Workbook1.xlsx') ];
XLApp.Names('_xlnm._FilterDatabase').Delete
end;

но выдает ошибку -"Член группы не найден"
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #39011991
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Me - это текущая форма или текущий лист
XLApp в вашем случае - это Application

ЗЫ:
Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Excel 2007 - Конфликт имен
    #39292639
Trikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tray,
Решил проблему созданием потока который тупо закрывает эти долбанные окошки.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
procedure TExcelFix.Execute;
var
  wnd: HWND;
  child: integer;
begin
 while True do
  begin
    wnd:= FindWindow(nil,'Конфликт имен');
    if wnd<>0 then
    begin
      child:= ChildWindowFromPoint(wnd, point(100,55));
      SendMessage(child,WM_SETFOCUS,0,0);
      SendMessage(child,EM_SETSEL,100,55);
      SendMessage(child, WM_CHAR,Ord('A'), 0);
      child:= ChildWindowFromPoint(wnd, point(200,90));
      SendMessage(child,EM_SETSEL,200,90);
      SendMessage(wnd, WM_Keydown,VK_return, 1);
      SendMessage(wnd, WM_Keyup,VK_return, 1);
    end;
    sleep(500);
  end;

end;



ЗЫЖ Если ещё кому актуально.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #39402619
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Актуально. Новый эксель открывает xlsx файлы спокойно, а через делфи (ole) этот же файл открывается черед диалоговые диалоговые окна для решения проблем (в частности, конфликт с именем Print_Area). Не хочется писать костыли в виде предварительного xml-парсинга с автозаменой или мониторинга окошек.
...
Рейтинг: 0 / 0
Excel 2007 - Конфликт имен
    #39402644
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Код: vbnet
1.
Application.DisplayAlerts  = False

пробовали ?
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2007 - Конфликт имен
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]