• Sbírejte data ze souborů XML do Excelu a exportujte. Převod xls na xml

    Byl zde úkol vytvořit XML soubor založený na XSD schématu. Hledání na fórech vedlo k mnoha diskuzím souvisejícím s nedostatečným pochopením procesu a pouze k několika článkům vysvětlujícím podstatu. Lidé se ptali, zápasili s řešením, ale poté, co jim úkol podlehl, prostě zmizeli, aniž by popsali mechanismus. To podnítilo vznik jednoduchý popis proces.
    P.S. Nenadávejte příliš, mým cílem nebylo vytvořit nějaký druh vědeckého článku striktně za použití správné terminologie, ale jednoduše pomoci udělat první krok k pochopení velmi výkonného mechanismu výměny XML.
    P.P.S. Hned je třeba poznamenat, že soubor ke stažení přiložený k článku je pouze prázdným místem, které tvoří pouze část požadované struktury XML souboru, protože. moje práce s tímto vykládáním měla spíše vzdělávací charakter (kopie předchozí dokument pro export na web FCS a stáhněte si pouze tabulkovou část souboru Excel efektivní řešení), a nedostatek času nedovolil dokončit tvorbu celé stavby, založené pouze na úvahách o perfekcionismu.

    Po registraci na webových stránkách Federální celní služby se tedy ukázalo, že k vytvoření statistických výkazů o vývozu je třeba stáhnout data z dokumentů Prodej zboží a služeb obchodní správy a vytvořit soubor ke stažení. .

    Existují dvě možnosti stahování.

    Za prvé: načtení tabulkové části s produkty z Excel soubor(Tato možnost byla vybrána jako pracovní, protože měla tu výhodu, že nebylo nutné se obtěžovat zpracováním "Záhlaví" dokumentu, ale bylo možné jednoduše zkopírovat předchozí a změnit to, co bylo požadováno v "Záhlaví" ).

    Za druhé: vytvoření souboru XML podle schématu staženého z webu FCS ve formě „Alba formátů elektronické formuláře dokumenty“. Album stačí velký počet XSD schémata. Našli schéma „Statistické formy účtování pohybu zboží“ a další soubory s popisem typu. Schémata jsou připojena k článku v archivu se zpracováním.

    K zobrazení XSD schémat byl použit bezplatný Microsoft XML Notepad 2007.

    Na obrázku je hlavní soubor s XSD schématem "Statistická forma účtování pohybu zboží." Obrázek zdůrazňuje hlavní bloky schématu XSD, které potřebujeme, abychom mu porozuměli.

    Z diagramu je vidět, že potřebujeme získat XML soubor naplněný strukturou uvedenou ve větvi "xs: element" typu StaticFormType.

    Struktura může být poměrně složitá (jako v našem případě). S popisy typů, které jsou přítomny přímo ve větvi, přesunuty do samostatné větve nebo dokonce umístěny v jiném souboru.

    Tato struktura je typu StaticFormType, která se zase skládá z základní typ BaseDocType, sada objektů odlišné typy a textové atributy.

    Základní typ BaseDocStyle je popsán v jiném souboru (a jmenném prostoru)
    .

    Tento soubor také obsahuje spoustu typů, které se v našem případě nepoužívají.

    Nyní přejdeme k práci v 1C. Stručně řečeno, to, co musíme udělat, se scvrkává na následující:

    1. Je vytvořena XDTO Factory

    OurXDTOFactory = CreateXDTOFactory(ArrayFullFileNamesWithXSDSchemas);

    2. Všechny komplexní datové typy jsou vytvořeny v XDTO factory, které dále doplníme vytvořený soubor XML:

    StaticFormType = MyFactoryXDTO.Type("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0", "StaticFormType");

    Datové typy zahrnuté v určitém typu lze získat z kolekce jeho vlastností:

    CUOrganizationType = StaticFormType.Properties.Get("Příjemce").Typ; NameType = CUOrganizationType.Properties.Get("OrganizationName").Typ; ShortNameType = CUOrganizationType.Properties.Get("ShortName").Type; LanguageCodeType = CUOrganizationType.Properties.Get("OrganizationLanguage").Typ;

    3. Když jsou vytvořeny všechny komplexní datové typy, tvoříme na jejich základě XML struktura soubor sestávající z objektů XDTO Factory:

    StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // kolekce s dokumenty NewDocuments = MyXDTOFactory.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "Nákladní list"); NewDocuments.PrDocumentNumber = MyXDTOFactory.Create(PrDocumentNumberType, "123-číslo"); NewDocuments.PrDocumentDate = MyXDTOFactory.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

    Zároveň vyplníme elementární (jednoduché typy) detaily.

    4. A nakonec vyložíme vše z XDTO Factory do souboru:

    XMLFile = Nový XMLWriter(); FileXML.OpenFile(NázevSouboru); FileXML.WriteDeclarationXML(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

    P.S. Archiv obsahuje prázdný prázdný soubor v XML (vytvoří se pouze některé detaily, které odrážejí všechny případy naplnění souboru) a XSD schémata.

    Rozbalte všechny soubory do nějakého adresáře.

    V něm se vytvoří XML.

    V organizaci lze vést účetnictví nejen v řešeních založených na platformě 1C: Enterprise, ale také v jiných softwarových systémech (Galaktika, Parus, SAP atd.). V tomto případě se objeví úkoly integrace dvou aplikací.

    Například některá aplikace (říkejme jí „X“) potřebuje přečíst seznam konfiguračních dokumentů. O praktické využití nebudeme mluvit o řešení takového problému, pouze poznamenám, že nejpohodlnější a univerzální způsob v takové situaci bude seznam dokumentů nahrán do XML formát.

    Výměna pomocí tohoto formátu je univerzální, protože s ním umí pracovat většina aplikací. Podívejme se, jak můžete nahrát seznam konfiguračních dokumentů z 1C:Enterprise do souboru XML.

    Export do XML

    A tak přejděme k tomu hlavnímu. Musíme iterovat seznam metadat dokumentu a vygenerovat seznam v souboru XML. Následující snímek obrazovky ukazuje algoritmus pro generování souboru XML:

    Export funkce CreateXML(). // Získání názvu dočasného souboru Cesta = GetTemporaryFileName() ; // Inicializujte třídu "WriterXML" Záznam = Nový záznamXML; // Otevře dočasný soubor pro zápis- 8 " ) ; // Zápis deklarace souboru XML Záznam. WriteDeclarationXML() ; // Napsat. WriteElementStart(" Konfigurace dokumentů" ) ; // První prvek // Atribut prvního prvku s datem vytvoření souboru Záznam. WriteAttribute(" vygenerováno " , Format(CurrentDate() , " DF = rrrr-MM- ddThh:mm:ss; DLF = DT" ) ) ; // Napište prvek pro každý konfigurační dokument. Do textu uvedeme název dokumentu. Pro každý dokument metadat. Záznam cyklu dokumentů. WriteItemStart("Dokument"); Záznam. WriteText(Jméno Doc.) ; Záznam. WriteEndElement() ; EndCycle ; // Dokončete psaní prvního prvku Záznam. WriteEndElement() ; Záznam. Zavřít() ; // Zavřete soubor // Získejte binární data souboru a uložte je do dočasného úložiště BinaryData = New BinaryData(Cesta) ; Adresa = PlaceInTempStorage(BinaryData, New UniqueIdentifier) ​​​​; Zpáteční adresa; // Vrátí adresu souboru v úložišti EndFunctions

    Každý vytvořený prvek musí být správně dokončen. Po provedení metody "WriteStartElement()" musí být provedena metoda "WriteEndElement", jinak bude struktura souboru XML nesprávná.

    Obecná šablona pro vytváření souborů XML je následující:

    // 1. Inicializujte třídu "XML Write". Záznam = Nový záznamXML; // 2. Otevřete dočasný soubor pro zápis Záznam. OpenFile(cesta, "UTF - 8 " ) ; // 3. Napište deklaraci souboru XML Záznam. WriteDeclarationXML() ; // // 4. ++ Napište obsah souboru XML Záznam. WriteElementStart(" ElementXML " ) ; Záznam. WriteEndElement() ; // -- Napište obsah souboru XML // 5. Zavřete soubor Záznam. Zavřít() ;

    Těchto pět kroků vytvoří téměř jakýkoli soubor XML.

    V našem příkladu je vytvořený soubor převeden na binární data a vrácen na místo, kde byla zavolána funkce „CreateXML“. Tento soubor lze poté zapsat do systému souborů.

    Příklad nahraného souboru můžete vidět na snímku obrazovky výše.

    Aplikace třetí strany

    Například jsem vytvořil aplikaci na . NET Framework k předvedení čtení souboru XML v aplikaci třetí strany.

    Program načte vytvořený soubor a zobrazí dokumenty ve formě seznamu:

    Můžete si to vyzkoušet sami, aplikace je ke stažení z odkazu na konci článku.

    Všestrannost

    Formát XML se používá ve většině komunikačních konfigurací mezi aplikovaná řešení na platformě 1C:Enterprise. Další běžně používanou komunikační metodou je spojení COM. XML umožňuje výměnu s téměř jakoukoli aplikací, která si zaslouží označení univerzální.

    Stahování:

    Aplikace pro čtení souborů XML.

    Zpracování vytvoření souboru XML.


    Se soubory XML pracuji už dlouho, ale až teď mě napadlo: Jak běžné prostředky vytvářet a upravovat XML soubory v MS Excel? Excel je pohodlný a intuitivní nástroj pro vytváření, úpravu a zpracování různých dat. Excel se studuje ve škole a pravděpodobně neexistuje člověk, který by uměl pracovat na PC a neznal základy práce v Excelu. Proto je to dle mého názoru nejvhodnější nástroj, který lze doporučit. běžní uživatelé pro vytváření a úpravu datových souborů různé aplikace, včetně webových aplikací. Mám doma nainstalovaný MS Excel 2013 a na jeho příkladu popíšu jednoduché postupy, které je nutné provést při vytváření datového souboru XML v Excelu. Myslím, že dříve Excel verze tohle bude taky fungovat. Provedeme několik jednoduchých kroků k vytvoření datového souboru XML. Zvažme je na příkladu vytvoření datového souboru události.

    1. Nejprve je potřeba vytvořit a vyplnit datovou tabulku v Excelu v souladu s datovou strukturou. K tomu použijte prosím položku menu Vložit/Tabulka.

    2. Vytvořme schéma souboru XML. Pro toto v textový editor zadejte následující řádky a uložte je do souboru.

    XHTML

    0 0 0 0 Svaté Kristovo vzkříšení. velikonoční 0 0 -7 0 -7 Vjezd Hospodinův do Jeruzaléma 1

    0

    0

    0

    0

    Svaté Kristovo vzkříšení. velikonoční

    0

    0

    -7

    0

    -7

    Vjezd Hospodinův do Jeruzaléma

    1

    3. Nyní otevřete kartu Vývojář, zmáčknout tlačítko Zdroj a zadejte zdrojový soubor XML. V případě potřeby aktivujte položku nabídky Vývojář v Předvolbách Excelu.

    4. Zbývá spárovat prvky schématu a sloupce tabulky přetažením prvků do odpovídajících záhlaví sloupců.

    5. A poslední krok: exportujte data tabulky do souboru XML pomocí kontextová nabídka. Postavte se na kteroukoli buňku stolu, stiskněte pravé tlačítko myši, vyberte XML/export... a uložte soubor XML s požadovaným názvem.

    Uložte soubor Excel pro pozdější úpravy a doplnění. V následujících odstavcích 1.-4. nebude nutné udělat!

    P.S. Proč jsem napsal tuto banální poznámku? Za prvé, abyste na to sami nezapomněli, a za druhé si myslím, že tyto informace budou užitečné pro uživatele, počínaje další verze 0.6 ;-)

    Rád bych na jednom místě řekl o docela typickém úkolu při práci XML, totiž stvoření XML na základě existujících. Tato operace se bude skládat z několika fází, během kterých budou řešeny další úkoly, jako např.

    • Stvoření XML na základě XSD a naopak.
    • Serializace a deserializace objektů.
    • Vytvoření třídy pro budoucí serializaci z XML nebo XSD.
    Než začnu, plánuji, aby čtenář slova znal XML A XSD. Pokud jde o XML, Myslím, že s tím nejsou žádné problémy, ale pokud jde o XSD Možná by mě zajímalo, co to je. Ve zkratce tedy:
    XSD je jazyk k popisu XML. A pokud se podíváte na obsah souboru obsahujícího tento popis, pak vyvstává otázka, proč popisovat zdánlivě zřejmé tagy vašeho XML? Představte si ale, že se integrujete s nějakým externím systémem a chcete formát používat pro výměnu dat XML. Tak tady to je XSD umožňuje popsat pro každý prvek jeho název, možné atributy, povinná pole nebo atributy, aby bylo jasné, že obsah značky může obsahovat pouze jeden vnitřní prvek ( ) a nic víc, nebo uzel může mít posloupnost prvků (< a> ... ). Když vnější systém je vaše, pak nemusí být problém, ale když je vnější organizace, Pak daný popis přes XSD, bude nástrojem pro řešení sporů s formátem a také pomocí nástrojů můžete zkontrolovat shodu libovolného formátu XML původní formát.
    Takže, co budeme dělat, abychom se naučili dupnout XML na základě vašeho benchmarku? Vše popíšu v pořádku.

    Dostupný:
    Nějaký druh XML (xmlfile.xml) uloženo v textový formát do souboru. Níže je text:

    < catalog > < book id = " bk101 " > < author >Gambardella, Matthew < title >XML Developer's Guide < genre >počítač < price > 44.95 < publish_date > 2000-10-01 < description >Podrobný pohled na vytváření aplikací s XML. < book id = " bk102 " > < author >Rally, Kim < title >půlnoční déšť < genre >Fantazie < price > 5.95 < publish_date > 2000-12-16 < description >Bývalá architektka bojuje s korporátními zombie, zlou čarodějkou a vlastním dětstvím, aby se stala královnou světa.

    Postup vytvoření nového:

    1. Nejprve pomocí utility XSD.exe, nebo pomocí online služby(hledejte „xml to xsd“ jeden z nich www.freeformatter.com/xsd-generator.html), vygenerujeme z dostupných XML její primitivní XSD popis. Na výstupu budeme mít zcela, automaticky vytvořený výstup.xsd soubor, který je již použitelný, ale nemusí být úplný.
    2. Dále na základě výstup.xsd , budou vytvořeny třídy C# xmlclass.cs Poté jej přidáme do našeho projektu. Třídu můžete vytvořit pomocí xsd.exe, nebo xsd2code utility nebo jakékoli online služby.
    3. Nyní jsme připraveni používat třídy souborů xmlclass.cs. Proto vytváříme a plníme instance daty třídy xml a poté pomocí procesu serializace převedeme objekty na XMLřetězec a poté jej uložte do nový soubor. Tak dostáváme XML na základě toho, co je k dispozici.
    Začněme!

    Krok 1: Vytvořte XSD z XML.

    Zde jsou tedy metody, které sám používám:
    1. Utility xsd.exe- tvůrce Microsoft.
    2. Utility xsd2code.exe - aplikace třetí strany, který umí vše stejně jako xsd.exe, ale je k dispozici pro přímé stažení (at tento moment se stal splatným od soud doba).
    3. Použití jakýchkoli online služeb.
    Aby bylo možné přijímat XSD.exe, budete muset dát nějaké sady Microsoft SDK, v jehož dodávce jde tato aplikace. Bohužel v tuto chvíli žádné ze studií v jejich sadě tuto utilitu neobsahuje.

    Odkaz na stažení a instalaci jednoho z SDK:
    Windows SDK pro Windows 7 a .NET Framework 4 .

    Použijeme vyhledávání a najdeme soubor xsd.exe, poté jej (pro zjednodušení naší práce) zkopírujte do složky vytvořené v kořenovém adresáři disku C:\xmltoxsd. Dále do stejné složky zkopírujeme naše xmlfile.xml a vše je připraveno ke spuštění.


    Odtrhnout " příkazový řádek" (Start -> "Spustit" -> "cmd"), přejděte do našeho adresáře a zavolejte s výchozími parametry xsd.exe, předáním našeho souboru xmlfile.xml jako parametru:


    A vidíme, že se poblíž objevil soubor xmlfile.xsd s obsahem.


    To je vše! Tyto akce stačí k vytvoření primitiva XSD soubor, se kterým se má pracovat. Ale stojí za to to pochopit xsd.exe, stejně jako každá jiná utilita, neví nic o typech vašich polí (proto bude typ pole téměř vždy tětiva), stejně jako o všech variantách atributů a parametrů. Tedy pokud některá značka nemá atribut ve vašem XML, pak to nebude v popisu. Proto XML by měl být co nejúplnější a v případě, že prvek může obsahovat několik podřízených polí, je lepší přidat alespoň dvě, aby xsd.exe uvědomil, že se jedná o sbírku.

    Syntax XSD není příliš složitý, takže pokud napíšete dostatečně seriózní popis, možná budete muset pracovat se souborem.

    Krok 2. Vytvoření třídy z XSD.

    Abychom vytvořili třídu v C#, musíme ji znovu použít xsd.exe ale s jiným parametrem /třídy, procházející cestou k našemu xmlfile.xsd.


    Po spuštění se objeví soubor xmlfile.cs, jehož obsah je uveden níže v komprimované podobě:


    Jak vidíte, pro vnitřní prvek katalog třída byla vytvořena katalogKniha, jehož pole odpovídají polím v XML a pole ID označeno jako atribut. xsd.exe správně pochopil, co je uvnitř katalog je uložena sbírka knih, takže se majetek objevil Položky, k naplnění podřízené kolekce.
    Komentář: xsd.exe neví, jak přidat komentáře k výsledným třídám a polím. V popisu XSD existuje prvek zvaný< xs:annotation > , který nejčastěji obsahuje< xs:documentation >, uvnitř kterého je umístěn popis pole. Teoreticky by to mělo být umístěno v /// popisu, ale v tuto chvíli xsd.exe odmítá přidat text k popisu, takže se člověk musí uchýlit k alternativám jako xsd2code nebo online služby.

    Krok 3. Serializace objektů v XML.

    Výsledné třídy jsou v souboru xmlfile.cs. Dále je jeho obsah nebo samotný soubor přidán do projektu vizuální studio , poté s ním můžete pracovat. Vytvořím demonstrativní knižní objekt, poté jej uložím do souboru ve formátu XML.

    Private void Example() ( // Vytvořte první knihu var kniha1 = nový katalogKniha () ( autor = "Král" , popis = "Velmi zajímavá kniha" , žánr = "Fantasy" , cena = 22.ToString(), id = "42011" , název = "It" }; !} // Vytvořte druhou knihu var kniha2 = nový katalogKniha () ( autor = "O"Brien, Tim" , popis = Iniciativa "Microsoft .NET" je podrobně prozkoumána v této podrobné programátorské příručce.", žánr = "Počítač" , cena = 36.ToString(), id = "30012" , název = "Microsoft .NET: The Programming Bible" }; // Vytvořte kořenový prvek adresáře obsahujícího dvě knihy výše var katalog = nový katalog () ( Položky = nový ( kniha1, kniha2 ) ); // Obsahuje katalog objektů XML var xmlCatalog = Serialize(katalog); // Zapíše řetězec do souboru // TODO Vyrobeno pro demonstrační účely. Přednostně voláním metody Serialize předat Stream do souboru Soubor .WriteAllText("Output.xml" , xmlCatalog); ) soukromý řetězec Serializovat (TType sourceObject) ( if (sourceObject == null ) ( return string .Empty; ) // K převodu na řetězec XML použijte XmlSerializer var xmlserializer = new XmlSerializer(typeof(TType)); var stringWriter = new StringWriter(); using (var Writer = XmlWriter .Create(stringWriter, new XmlWriterSettings () ( Indent = true ))) ( xmlserializer.Serialize(writer, sourceObject); return stringWriter.ToString(); ) ) Po spuštění a otevření výstup.xml můžete vidět, že jsme uložili tak, jak jsme chtěli (spodní soubor - " Vytvořeno kódem").