Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2007 - Конфликт имен / 25 сообщений из 30, страница 1 из 2
02.04.2008, 17:27
    #35230748
Paparocii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
Здравствуйте!

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

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

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

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

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

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

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


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

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

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


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

При закрытии приложения (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
09.11.2013, 20:06
    #38458945
Ilias18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
Ещё уточнение. В общем понял, что нельзя вообще пытаться сохранять файл с включенным автофильтром. Мое приложение использует лист экселя как базу данных, обращается к нему, записывает и сохраняет каждое изменение. Пришлось программно каждый раз снимать автофильтр перед сохранением и восстанавливать его после успешного сохранения файла.
...
Рейтинг: 0 / 0
09.11.2013, 21:38
    #38458984
Ilias18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
Конечное решение

//При открытии книги
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
25.11.2013, 10:30
    #38476247
vasyurko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
Недавно столкнулся с такой же проблемой и решил поделится решением. В моем случае проблема осложнялась тем, что я загружаю данные из 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
25.11.2013, 12:17
    #38476413
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
В модуль книги:
Код: 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
25.11.2013, 13:01
    #38476484
vasyurko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
kuklp, Ваше решение мне не подходит, т.к. я не смогу заставить всех клиентов, которые присылают мне Excel файлы прописать у себя этот макрос.
...
Рейтинг: 0 / 0
25.11.2013, 15:21
    #38476800
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
vasyurko, в теме ведь не только у Вас с этим проблема и кто знает, сколько еще пользователей заглянут в тему с надеждой решить ее :)
...
Рейтинг: 0 / 0
09.04.2014, 08:41
    #38609278
voronin_2006
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
vasyurko, спасибо за ценную наводку!!! Целый день думал, что можно сделать. Обидно только, что файлы *.xlsb не обработать подобным методом (файл xml хранится в бинарном виде).
...
Рейтинг: 0 / 0
10.04.2014, 14:01
    #38611214
Tray
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
у меня при открытии файла Excel 2007 ручками никакого вопроса не возникает, однако при открытии через Delphi возникает эта фигота

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

что прописать в Delphi, чтобы эта фигота игнорилась?
все примеры, которые здесь привели, касаются закрытия Excel файла, что мне подходит, макрос я тоже не пропишу в каждый файл.
...
Рейтинг: 0 / 0
10.04.2014, 14:01
    #38611216
Tray
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
*все примеры, которые здесь привели, касаются закрытия Excel файла, что мне НЕ подходит, макрос я тоже не пропишу в каждый файл.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.07.2015, 10:29
    #39011940
Tray
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
автор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
21.07.2015, 11:08
    #39011991
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
Me - это текущая форма или текущий лист
XLApp в вашем случае - это Application

ЗЫ:
Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
16.08.2016, 14:44
    #39292639
Trikon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
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
11.02.2017, 12:32
    #39402619
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
Актуально. Новый эксель открывает xlsx файлы спокойно, а через делфи (ole) этот же файл открывается черед диалоговые диалоговые окна для решения проблем (в частности, конфликт с именем Print_Area). Не хочется писать костыли в виде предварительного xml-парсинга с автозаменой или мониторинга окошек.
...
Рейтинг: 0 / 0
11.02.2017, 13:28
    #39402644
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2007 - Конфликт имен
JaDi,

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

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


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