Удалите пространство имен x, используя openxml

Я нашел этот вопрос, и у меня был тот же вопрос.

XLSX- как избавиться от префикса пространства имен по умолчанию x 😕

У меня возникла проблема при создании рабочей таблицы OpenENML Excel. Специально часть таблицы стилей. Когда таблица стилей каким-то образом получила стиль для временной шкалы (только Excel 2013), она может генерировать excel-файл. Затем таблица стилей содержит правое пространство имен (xmlns: x = "…"). Это позволяет открыть его в Excel 2010. Но при сохранении сгенерированного excel-файла с Excel 2010 пространство имен x становится пространством имен по умолчанию, а удаляется из всех элементов, кроме элемента расширения временной шкалы. При повторном открытии файла в excel это приведет к ошибке. При открытии того же файла в OpenXml Productivity Tool появляется ошибка, когда x является неизвестным пространством имен.

Итак, вот какой код xml-result. Fisrt после генерации файла excel (stylesheet.xml):

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <x:styleSheet xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" mc:Ignorable="x14ac"> <x:fonts count="3" x14ac:knownFonts="1"> <x:font> <x:sz val="11"/> <x:color theme="1"/> <x:name val="Calibri"/> <x:family val="2"/> <x:scheme val="minor"/> </x:font> <!-- more fonts --> </x:fonts> <x:fills count="7"> <x:fill> <x:patternFill patternType="none"/> </x:fill> <!-- more fills --> </x:fills> <x:borders count="1"> <x:border> <x:left/> <x:right/> <x:top/> <x:bottom/> <x:diagonal/> </x:border> </x:borders> <x:cellStyleXfs count="1"> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0"/> </x:cellStyleXfs> <x:cellXfs count="18"> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/> <x:xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" pivotButton="1"/> <x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"> <x:alignment horizontal="left"/> </x:xf> <!-- more cells --> </x:cellXfs> <x:cellStyles count="1"> <x:cellStyle name="Standaard" xfId="0" builtinId="0"/> </x:cellStyles> <x:dxfs count="1"> <x:dxf> <x:numFmt numFmtId="19" formatCode="m/d/yyyy"/> </x:dxf> </x:dxfs> <x:tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/> <x:extLst> <x:ext xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}"> <x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/> </x:ext> <x:ext xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" uri="{9260A510-F301-46a8-8635-F512D64BE5F5}"> <x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/> </x:ext> </x:extLst> </x:styleSheet> 

и после сохранения в Excel 2010

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac"> <fonts count="3" x14ac:knownFonts="1"> <font> <sz val="11"/> <color theme="1"/> <name val="Calibri"/> <family val="2"/> <scheme val="minor"/> </font> <!-- more fonts --> <fills count="7"> <fill> <patternFill patternType="none"/> </fill> <!-- more fills --> </fills> <borders count="1"> <border> <left/> <right/> <top/> <bottom/> <diagonal/> </border> </borders> <cellStyleXfs count="1"> <xf numFmtId="0" fontId="0" fillId="0" borderId="0"/> </cellStyleXfs> <cellXfs count="18"> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/> <xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" pivotButton="1"/> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"> <alignment horizontal="left"/> </xf> <!-- more cells --> </cellXfs> <cellStyles count="1"> <cellStyle name="Standaard" xfId="0" builtinId="0"/> </cellStyles> <dxfs count="1"> <dxf> <numFmt numFmtId="164" formatCode="m/d/yyyy"/> </dxf> </dxfs> <tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/> <extLst> <ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"> <x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/> </ext> <x:ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"> <x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/> </x:ext> </extLst> </styleSheet> 

как вы видете. Часть <x:ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" все еще содержит пространство имен x, в котором оно удалено из других эльфов.

Кто-нибудь знает, как это исправить? Моя первая мысль превращает пространство имен x в пространство имен по умолчанию, чтобы оно больше не требовало x: в таблице стилей вообще. Но я не смог найти способ сообщить об этом openKML SDK.

Я знаю, что это старый вопрос, но на всякий случай у кого-то еще такая же проблема, что я сделал, это удалить конфликтующие разделы. Хотя это не оптимальное решение, оно позволяет пользователю открывать файл в Excel 2010, повторно сохранять его с другим именем, а затем повторно открывать только что созданный файл без проблем.

Чтобы удалить разделы, я использовал этот код:

  if (Document.WorkbookPart.WorkbookStylesPart.Stylesheet.Descendants<StylesheetExtensionList>().Any()) { Document.WorkbookPart.WorkbookStylesPart.Stylesheet.RemoveAllChildren<StylesheetExtensionList>(); } 

Я не использую Document.WorkbookPart.WorkbookStylesPart.Stylesheet.Save() так как я сохранил изменения в другом месте, но вам может понадобиться его сохранить, это зависит от ваших потребностей.

Я решил удалить всех детей, но, возможно, вы можете удалить только тот, который вызывает проблему.

Надеюсь, это поможет вам;)

  • Добавление изображения в excel с помощью openxml sdk
  • Получите используемый диапазон электронной таблицы Open XML на английских метрических единицах (ЭВС)
  • Элементы таблицы стилей
  • Как добавить строку в Excel с помощью OpenXML SDK 2.0?
  • Как установить Excel «Титулы печати» с помощью OpenXML
  • Open XML SDK - динамически создавать строки
  • Как читать значение столбца столбца excel с использованием OpenXML в C #
  • Как перейти из рабочего листа в таблицу документов?
  • Чтение или извлечение значения из электронной таблицы с использованием существующих имен rangenames
  • Probelms вставляет нижний колонтитул в Excel - OpenXML
  • Excel добавляет данные в таблицу Worksheet в коде
  • Давайте будем гением компьютера.