Xml for excel 2007

Most of the time, you’ll probably want to save your workbooks in the current file format (.xlsx). But sometimes, you might need to save a workbook in another file format, like the file format of an earlier version of Excel, a text file, or a PDF or XPS file. Just keep in mind that whenever you save a workbook in another file format, some of its formatting, data, and features might not be saved.

For a list of file formats (also called file types) you can (and can’t) open or save in Excel 2013, see File formats that are supported in Excel at the end of this article.

  1. Open the workbook you want to save.

  2. Click File > Save As.

    Save As option on the File tab

  3. Under Places, pick the place where you want to save the workbook. For example, pick OneDrive to save it to your Web location or Computer to save it in a local folder like your Documents.

    Choose a Location option

  4. In the Save As dialog box, navigate to the location you want.

    Save As dialog box

  5. In the Save as type list, click the file format you want. Click the arrows to scroll to file formats that aren’t visible in the list.

    Note: The file formats you’ll see vary, depending on what type of sheet is active in your workbook (a worksheet, chart sheet, or other type of sheet).

  6. In the File name box, accept the suggested name or type a new name for the workbook.

If you opened an Excel 97-2003 workbook but don’t need to keep it in that file format, simply convert it to the current file format (.xlsx).

  1. Click File > Info.

  2. Click Convert.

Convert button

In Excel 2013, you can open and save files in the following file formats:

Excel file formats

Format

Extension

Description

Excel Workbook

.xlsx

The default XML-based file format for Excel 2007-2013. Cannot store Microsoft Visual Basic for Applications (VBA) macro code or Microsoft Office Excel 4.0 macro sheets (.xlm).

Strict Open XML Spreadsheet

.xlsx

An ISO strict version of the Excel Workbook file format (.xlsx).

Excel Workbook (code)

.xlsm

The XML-based and macro-enabled file format for Excel 2007-2013. Stores VBA macro code or Excel 4.0 macro sheets (.xlm).

Excel Binary Workbook

.xlsb

The binary file format (BIFF12) for Excel 2007-2013.

Template

.xltx

The default file format for an Excel template for Excel 2007-2013. Cannot store VBA macro code or Excel 4.0 macro sheets (.xlm).

Template (code)

.xltm

The macro-enabled file format for an Excel template in Excel 2007-2013. Stores VBA macro code or Excel 4.0 macro sheets (.xlm).

Excel 97- Excel 2003 Workbook

.xls

The Excel 97 — Excel 2003 Binary file format (BIFF8).

Excel 97- Excel 2003 Template

.xlt

The Excel 97 — Excel 2003 Binary file format (BIFF8) for an Excel template.

Microsoft Excel 5.0/95 Workbook

.xls

The Excel 5.0/95 Binary file format (BIFF5).

XML Spreadsheet 2003

.xml

XML Spreadsheet 2003 file format (XMLSS).

XML Data

.xml

XML Data format.

Excel Add-In

.xlam

The XML-based and macro-enabled Add-In format for Excel 2007-2013. An Add-In is a supplemental program that is designed to run additional code. Supports the use of VBA projects and Excel 4.0 macro sheets (.xlm).

Excel 97-2003 Add-In

.xla

The Excel 97-2003 Add-In, a supplemental program that is designed to run additional code. Supports the use of VBA projects.

Excel 4.0 Workbook

.xlw

An Excel 4.0 file format that saves only worksheets, chart sheets, and macro sheets. You can open a workbook in this file format in Excel 2013, but you cannot save an Excel file to this file format.

Text file formats

Format

Extension

Description

Formatted Text (Space-delimited)

.prn

Lotus space-delimited format. Saves only the active sheet.

Text (Tab-delimited)

.txt

Saves a workbook as a tab-delimited text file for use on another Microsoft Windows operating system, and ensures that tab characters, line breaks, and other characters are interpreted correctly. Saves only the active sheet.

Text (Macintosh)

.txt

Saves a workbook as a tab-delimited text file for use on the Macintosh operating system, and ensures that tab characters, line breaks, and other characters are interpreted correctly. Saves only the active sheet.

Text (MS-DOS)

.txt

Saves a workbook as a tab-delimited text file for use on the MS-DOS operating system, and ensures that tab characters, line breaks, and other characters are interpreted correctly. Saves only the active sheet.

Unicode Text

.txt

Saves a workbook as Unicode text, a character encoding standard that was developed by the Unicode Consortium.

CSV (comma delimited)

.csv

Saves a workbook as a comma-delimited text file for use on another Windows operating system, and ensures that tab characters, line breaks, and other characters are interpreted correctly. Saves only the active sheet.

CSV (Macintosh)

.csv

Saves a workbook as a comma-delimited text file for use on the Macintosh operating system, and ensures that tab characters, line breaks, and other characters are interpreted correctly. Saves only the active sheet.

CSV (MS-DOS)

.csv

Saves a workbook as a comma-delimited text file for use on the MS-DOS operating system, and ensures that tab characters, line breaks, and other characters are interpreted correctly. Saves only the active sheet.

DIF

.dif

Data Interchange Format. Saves only the active sheet.

SYLK

.slk

Symbolic Link Format. Saves only the active sheet.

Note: If you save a workbook in any text format, all formatting is lost.

Other file formats

Format

Extension

Description

DBF 3, DBF 4

.dbf

dBase III and IV. You can open these files formats in Excel, but you cannot save an Excel file to dBase format.

OpenDocument Spreadsheet

.ods

OpenDocument Spreadsheet. You can save Excel 2010 files so they can be opened in spreadsheet applications that use the OpenDocument Spreadsheet format, such as Google Docs and OpenOffice.org Calc. You can also open spreadsheets in the .ods format in Excel 2010. Formatting might be lost when saving and opening .ods files.

PDF

.pdf

Portable Document Format (PDF). This file format preserves document formatting and enables file sharing. When the PDF format file is viewed online or printed, it retains the format that you intended. Data in the file cannot be easily changed. The PDF format is also useful for documents that will be reproduced by using commercial printing methods.

XPS Document

.xps

XML Paper Specification (XPS). This file format preserves document formatting and enables file sharing. When the XPS file is viewed online or printed, it retains exactly the format that you intended, and the data in the file cannot be easily changed.

File formats that use the clipboard

If you copied data to the clipboard in one of the following file formats, you can paste it into Excel using the Paste or Paste Special command (Home > Clipboard > Paste).

Format

Extension

Clipboard type identifiers

Picture

.wmf or .emf

Pictures in Windows Metafile Format (WMF) or Windows Enhanced Metafile Format (EMF).

Note: If you copy a Windows metafile picture from another program, Excel pastes the picture as an enhanced metafile.

Bitmap

.bmp

Pictures stored in Bitmap format (BMP).

Microsoft Excel file formats

.xls

Binary file formats for Excel versions 5.0/95 (BIFF5), Excel 97-2003 (BIFF8), and Excel 2013 (BIFF12).

SYLK

.slk

Symbolic Link Format.

DIF

.dif

Data Interchange Format.

Text (tab-delimited)

.txt

Tab-separated text format.

CSV (Comma-delimited)

.csv

Comma-separated values format.

Formatted text (Space-delimited)

.rtf

Rich Text Format (RTF). Only from Excel.

Embedded object

.gif, .jpg, .doc, .xls, or .bmp

Microsoft Excel objects, objects from properly registered programs that support OLE 2.0 (OwnerLink), and Picture or another presentation format.

Linked object

.gif, .jpg, .doc, .xls, or .bmp

OwnerLink, ObjectLink, Link, Picture, or other format.

Office drawing object

.emf

Office drawing object format or Picture (Windows enhanced metafile format, EMF).

Text

.txt

Display Text, OEM Text.

Single File Web Page

.mht, .mhtml

Single File Web Page (MHT or MHTML). This file format integrates inline graphics, applets, linked documents, and other supporting items referenced in the document.

Web Page

.htm, .html

Hypertext Markup Language (HTML).

Note: When you copy text from another program, Excel pastes the text in HTML format, regardless of the format of the original text.

File formats that are not supported in Excel 2013

The following file formats are no longer supported, so you can’t open or save files in these file formats.

To work with your workbook data in a program that isn’t supported anymore, try the following:

  • Search the Web for a company that makes file format converters for file formats that aren’t supported in Excel.

  • Save your workbook to another file format that can be opened in the other program. For example, save to an XML spreadsheet or text file format that the other program might support as well.

Format

Extension

Clipboard type identifiers

Excel Chart

.xlc

Excel 2.0, 3.0, and 2.x file formats

WK1, FMT, WK2, WK3, FM3, WK4

.wk1, .wk2, .wk3, .wk4, .wks

Lotus 1-2-3 file formats (all versions)

Microsoft Works

.wks

Microsoft Works file format (all versions)

DBF 2

.dbf

DBASE II file format

WQ1

.wq1

Quattro Pro for MS-DOS file format

WB1, WB3

.wb1, .wb3

Quattro Pro 5.0 and 7.0 for Windows.

You can save an Excel 2007 or later workbook in the file format of an earlier version of Excel, in a text file format, and in other file formats, such as PDF or XPS. By default, files are saved in the .xlsx file format, but you can change the default file format for saving. If you frequently use the Save As command, you may want to add it to the Quick Access Toolbar.

Important: If you save a workbook in a file format other than the current Excel file format, formats and features that are unique to Excel 2007 and later will not be retained. For more information, see Use Excel with earlier versions of Excel.

  1. In Excel, open the workbook that you want to save for use in another program.

  2. On the File tab, click Save As.

  3. To save the workbook to a different location, specify the drive and location in the file path and folder boxes.

  4. In the File name box, accept the suggested name or type a new name for the workbook.

  5. In the Save as type list, click the format that you know you can open in the other program.

If needed, click the arrows to scroll to file formats that are not visible in the list.

Note: The file formats that are available vary, depending on what type of sheet is active (a worksheet, chart sheet, or other type of sheet).

Tip: For more information on how to save a workbook in PDF (.pdf) or XPS (.xps) file formats, see Save as PDF or XPS.

You can save any file format that you can open in Excel 2007 and later in the current Excel Workbook file format (.xlsx). By doing this, you can use new features that are not supported by other file formats.

Note: When you save a workbook that was created in an earlier version of Excel as an Excel 2007 and later workbook, some formats and features may not be retained. For information on unsupported Excel 97-2003 features, see Use Excel with earlier versions of Excel.

  1. Open the file that you want to save in the current file format.

  2. On the File tab, click Save As.

  3. To save the file to a different location, specify the drive and location in the file path and folder boxes.

  4. In the File name box, accept the suggested name or type a new name for the workbook.

  5. In the Save as type list, do one of the following:

    • If you are saving a workbook that was created in an earlier version of Excel, and the workbook contains macros that you want to retain, click Excel Macro-Enabled Workbook (*.xlsm).

    • If you want to save the workbook as a template, click Excel Template (*.xltx).

    • If you are saving a workbook that was created in an earlier version of Excel, the workbook contains macros that you want to retain, and you want to save the workbook as a template, click Excel Macro-Enabled Template.xltm.

    • If you want to save the workbook in the current Excel Workbook file format, click Excel Workbook (*.xlsx).

    • If you want to save the file in the new binary file format, click Excel Binary Workbook (*.xslb).

  6. Click Save.

You can change the file type that is used by default when you save a workbook.

  1. On the File tab, click Options.

  2. In the Save category, under Save workbooks, in the Save files in this format box, click the file format that you want to use by default.

The Save As command is not available as a button on the ribbon. You can, however, add the command to the Quick Access Toolbar.

  1. Click the dropdown arrow on the Quick Access Toolbar, and then click More Commands.

    Quick Access Toolbar arrow

  2. In the Choose commands from box, make sure that Popular Commands is selected.

  3. In the list box, scroll to the Save As button, and then select it.

  4. Click Add.

You can save a Microsoft Office Excel 2007 workbook in a different file format. You can save a workbook in an earlier version file format, in text file format, and in other file formats, such as PDF or XPS. You can also save any file format that you can open in Office Excel 2007 as an Excel 2007 workbook. By default, Excel 2007 saves files in the .xlsx file format, but you can change the default file format for saving.

If you frequently use the Save As command, you may want to add it to the Quick Access Toolbar.

You can save any file format that you can open in Excel 2007 in the current Excel Workbook file format (.xlsx). By doing this, you can use the new features of Excel 2007, such as the larger grid, that are not supported by other file formats.

Note: When you save a workbook that was created in an earlier version of Excel as an Excel 2007 workbook, some formats and features may not be retained.

  1. Open the workbook that you want to save as an Excel 2007 workbook.

  2. Click the Microsoft Office Button Office button image, and then click Save As.

  3. In the File name box, accept the suggested name or type a new name for the workbook.

  4. In the Save as type list, do one of the following:

    • If you are saving a workbook that was created in an earlier version of Excel, and the workbook contains macros that you want to retain, click .xlsm.

    • If you want to save the workbook as a template, click .xltx.

    • If you are saving a workbook that was created in an earlier version of Excel, the workbook contains macros that you want to retain, and you want to save the workbook as a template, click .xltm.

    • If you want to save the workbook in the current Excel Workbook file format, click .xlsx.

    • If you want to save the file in the new binary file format, click .xslb.

    • For more information about file formats, see File formats that are supported in Excel.

  5. Click Save.

You can change the file type that is used by default when you save a workbook.

  1. Click the Microsoft Office Button Office button image, and then click Excel Options.

  2. In the Save category, under Save workbooks, in the Save files in this format box, click the file format that you want to use by default.

The Save As command is not available as a button on the Microsoft Office Fluent user interface Ribbon. You can, however, add the command to the Quick Access Toolbar.

Quick access toolbar

  1. Click the Microsoft Office Button Office button image.

  2. Right-click Save As, and then click Add to Quick Access Toolbar.

  • Download demo project and source files — 192 KB

Introduction

With Office 2007, Microsoft decided to change the default application formats from old, proprietary, closed formats (DOC, XLS, PPT) to new, open, and standardized XML formats (DOCX, XLSX, and PPTX). The new formats share some similarities with the old Office XML formats (WordML, SpreadsheetML) and some similarities with the competing OpenOffice.org OpenDocument format, but there are many differences. Since the new formats will be default in Office 2007 and Microsoft Office is the most predominant Office suite, these formats are destined to be popular and you will probably have to deal with them sooner or later.

This article will explain the basics of the Open XML file format, and specifically the XLSX format, the new format for Excel 2007. Presented is a demo application which writes / reads tabular data to / from XLSX files. The application is written in C# using Visual Studio 2010. The created XLSX files can be opened using Excel 2007 or greater.

Microsoft Open XML format

Every Open XML file is essentially a Zip archive containing many other files. Office-specific data is stored in multiple XML files inside that archive. This is in direct contrast with the old WordML and SpreadsheetML formats which were single, non-compressed XML files. Although more complex, the new approach offers a few benefits:

  • You don’t need to process the entire file in order to extract specific data.
  • Images and multimedia are now encoded in native format, not as text streams.
  • Files are smaller as a result of compression and native multimedia storage.

In Microsoft’s terminology, an Open XML Zip file is called a package. Files inside that package are called parts. It is important to know that every part has a defined content type and there are no default type presumptions based on the file extension. The content type can describe anything; application XML, user XML, images, sounds, video, or any other binary object. Every part must be connected to some other part using a relationship. Inside the package are special XML files with a «.rels» extension which define the relationship between the parts. There is also a start part (sometimes called «root», which is a bit misleading because the graph containing all parts doesn’t have to be a tree structure), so the entire structure looks like in picture 1.

Picture 1: Parts and relations inside XLSX file.

Picture 1: Parts and relations inside an XLSX file.

To cut a long story short, in order to read the data from an Open XML file, you need to:

  1. Open package as a Zip archive — any standard Zip library will do.
  2. Find parts that contain data you want to read — you can navigate through a relationship graph (more complex), or you can presume that certain parts have a defined name and path (Microsoft can change that in the future).
  3. Read parts you are interested in — using the standard XML library (if they are XML), or some other method (if they are images, sounds, or some other type).

On the other side, if you want to create a new Open XML file, you need to:

  1. Create/get all the necessary parts — by using some standard XML library (if they are XML), by copying them, or by using some other method.
  2. Create all relationships — create «.rels» files.
  3. Create content types — create a «[Content_Types].xml» file.
  4. Package everything into a Zip file with the appropriate extension (DOCX, XLSX, or PPTX) — any standard Zip library will do.

The whole story about packages, parts, content types, and relations is the same for all Open XML documents (regardless of the originating application), and Microsoft refers to it as Open Packaging Conventions.

Excel 2007 Open XML specifics

Excel 2007 extends on the basis of Open Packaging Conventions by adding its own application-specific XML types. Reference schemas for all XML files used in Office can be downloaded from MSDN, but note that some things are still open to change until the final Excel 2007 release.

We just want to write / read worksheet data, so we need to look in the folder «xlworksheets» inside the XLSX file where all the worksheets are located. For every worksheet, there is a separate XML file; «sheet1.xml«, «sheet2.xml«, and so on. When you open such a file, you will notice that all of the sheet data is inside the <sheetData> element. For every row, there is a <row> element; for every cell, there is a <c> element. Finally, the value of the cell is stored in a <v> element.

However, real world XML is never simple as schoolbook XML. You will notice that numbers get encoded as numbers inside the <v> element:

<c r="A1">
    <v>100</v>
</c>

However, a string value (like «John») also gets encoded as number:

<c r="B1" t="s">
    <v>0</v>
</c>

That is because MS Excel uses an internal table of unique strings (for performance reasons). Zero is an index of that string in an internal table of strings, and the attribute t=»s» tells us that the underlying type is a string, not a number. So where is the table of unique strings located? It is in the «xlsharedStrings.xml» XML file, and contains all strings used in the entire workbook, not just the specific worksheet.

This approach is used for many other things; cell styles, borders, charts, number formats, etc. In fact, that becomes the major programming problem when working with XLSX files — updating and maintaining various tables of some unique Excel objects. In this article, we will just write / read data values, but if you require some complex formatting, you should probably be better using some commercial component which does all the tedious work for you.

Implementation

Our demo is a Windows Presentation Foundation application (see picture 2), written in C#, using Visual Studio 2010. Since using Microsoft Packaging API for zipping and unzipping multiple files is cumbersome and tedious, our demo uses an Open-Source Zip library called SharpZipLib (available at: http://www.icsharpcode.net/OpenSource/SharpZipLib). For demonstration purposes, we will extract the entire Zip files to a TEMP folder so we can examine the contents of that folder and files while debugging the demo application. In a real world application, you may want to avoid extracting to the temporary folder and just read to / write from the Zip file directly.

Application will also read / write data to a DataTable so it can be used as a reference for Excel to DataTable export / import scenarios.

For XML processing, the choice is simple. For reading XML files, we use the XmlReader class, and for writing, we use the XmlWriter class. Both come with the .NET Framework, but you can also use any other XML processing library.

Picture 2: Demo application in action.

Picture 2: Demo application in action.

Data reading

We want to read a simple «In.xlsx» file (in the «Input» folder) and copy its contents to the DataTable. That file contains a list of people with their first and last names (text values) and their IDs (number values). When the «Read input .xlsx file» button is clicked, the following code is executed:

private void ReadInput(object sender, RoutedEventArgs e)
{
    
    var fileName = this.inputTextBox.Text;
 
    
    XlsxRW.DeleteDirectoryContents(tempDir);
 
    
    XlsxRW.UnzipFile(fileName, tempDir);
 
    IList<string> stringTable;
    
    using (var stream = new FileStream(Path.Combine(tempDir, @"xlsharedStrings.xml"),
        FileMode.Open, FileAccess.Read))
        
        stringTable = XlsxRW.ReadStringTable(stream);
 
    
    using (var stream = new FileStream(Path.Combine(tempDir, @"xlworksheetssheet1.xml"),
        FileMode.Open, FileAccess.Read))
        
        XlsxRW.ReadWorksheet(stream, stringTable, this.data);
}

Nothing unusual happens here. The XLSX file is unzipped to the TEMP folder and then the necessary XML parts (now files) are processed. The file «sharedStrings.xml» contains a global table of unique strings while the file «sheet1.xml» contains data for the first sheet. Helper methods are pretty straightforward XML reading code — you can download the demo application code to examine them in more detail.

If everything is OK, after the button click, all data will show up in the DataGrid.

Data writing

Now we want to write data from a DataTable to the «Out.xlsx» file in the «Output» folder. You can change some data, or add some new rows in the DataGrid. When the «Write output .xlsx file» button is clicked, the following code is executed:

private void WriteOutput(object sender, RoutedEventArgs e)
{
    
    string fileName = this.outputTextBox.Text;
 
    
    XlsxRW.DeleteDirectoryContents(tempDir);
 
    
    XlsxRW.UnzipFile(templateFile, tempDir);
 
    
    
    
    IDictionary<string, int> lookupTable;
 
    
    var stringTable = XlsxRW.CreateStringTables(this.data, out lookupTable);
 
    
    using (var stream = new FileStream(Path.Combine(tempDir, @"xlsharedStrings.xml"),
        FileMode.Create))
        
        XlsxRW.WriteStringTable(stream, stringTable);
 
    
    using (var stream = new FileStream(Path.Combine(tempDir, @"xlworksheetssheet1.xml"),
        FileMode.Create))
        
        XlsxRW.WriteWorksheet(stream, this.data, lookupTable);
 
    
    XlsxRW.ZipDirectory(tempDir, fileName);
 
    
    if (this.openFileCheckBox.IsChecked == true)
        System.Diagnostics.Process.Start(fileName);
}

This time the code is a bit more complicated. In order not to generate all the necessary parts needed for the XLSX file, we decide to use a template file. We extract the template file to a temporary folder and then just change the XML parts containing the shared string table and worksheet data. All other parts, relationships, and content types stay the same — so we don’t need to generate any of that. Note that we use two string tables: a lookup IDictionary<string, int> for fast searching, and an ordinary IList<string> where items are sorted by their index. We could pull it out only with IList<string> but then we would need to search the entire IList<string> every time we add a new string (to check if it is already there). The CreateStringTables() helper method builds both string tables, the WriteStringTable() helper method writes the string table XML, and the WriteWorksheet() helper method writes the worksheet data XML.

Again, download the demo application code to examine the helper methods in more detail.

Download links

You can download the latest version of the demo application (together with the C# source code) from here.

Alternative ways

As always in programming, there is more than one method to achieve the same thing.

You could use Excel automation to start an instance of Excel 2007 (or any other Office application) and then use interop calls to create a document and save it. However, using automation has some drawbacks I have already written about (see why is GemBox.Spreadsheet better than automation).

Open Packaging API, released with .NET 3.5, has support for Open Packaging Conventions (package handling and navigating the relationships) but there is no support for accessing application specific data so you will still need to process XML parts manually.

As another option, you could use some third party Excel C# / VB.NET component which will come with support for the Open XML format. This will probably cost you some money, but has the advantage that usually more than one format (for example, XLS, XLSX, CSV) are supported within the same API, so your application will be able to target different file formats using the same code.

Коротко о главном

Общий обзор формата Office 2007 Open XML Format

   Контейнер

   Части документа

   Реляционные элементы

   Типизованные элементы

   Встроенные объекты

Детали реализации

Программные интерфейсы

Сценарии использования документов в XML-формате

Коротко о главном

Одной из новинок Microsoft Office 2007 станет поддержка нового формата хранения документов на базе языка XML. Этот формат будет поддерживаться в программных продуктах Microsoft Word 2007, Microsoft Excel 2007 и Microsoft PowerPoint 2007. В данном обзоре мы рассмотрим основные характеристики Office 2007 Open XML Format, обсудим формат файлов, а также программные интерфейсы для работы с офисными файлами в новом формате.

Поддержка языка XML не является эксклюзивом пакета Microsoft Office — первые варианты такой поддержки появились в 1999 году в Office 2000, когда были представлены XML-форматы для Word (WordprocessingML) и Excel (SpreadSheetML). В версии Office 2007 появился формат PresentationML для PowerPoint, а форматом сохранения документов по умолчанию стал ZIP-контейнер, соответствующий спецификации Open Packaging Conventions (подмножество Office 2007 Open XML Format) и пришедшей на смену бинарным форматам хранения документов, электронных таблиц и презентаций, использовавшихся в предыдущих версиях Office.

В таблице приведен список используемых в Microsoft Office 2007 расширений файлов, в которых хранятся документы в формате Office 2007 Open XML Format.

Microsoft планирует выпуск соответствующих обновлений для предыдущих версий Office, начиная с Office 2000 — для того, чтобы эти продукты могли полноценно работать с новым форматом хранения документов, создаваемых в Word, Excel и PowerPoint.

Общий обзор формата Office 2007 Open XML Format

Начнем обсуждение Office 2007 Open XML Format с рассмотрения общих характеристик этого формата. Затем в следующем разделе мы обратимся к более подробному рассмотрению деталей сохранения документов, создаваемых такими приложениями Microsoft Office 2007, как Word 2007, Excel 2007 и PowerPoint 2007.

Контейнер

XML-формат, используемый в Microsoft Office 2007, представляет собой ZIP-архив — контейнер, который называется package и в котором помещаются различные компоненты документа, называемые частями (part) и элементами (item). Части являются фрагментами документа и отвечают за его содержимое, элементы представляют собой метаданные, описывающие то, каким образом части должны быть собраны вместе и отображены. Элементы можно разделить на два типа: реляционные (relationship items), описывающие взаимоотношения между частями и типизованные (content-type items), задача которых — дать описание содержимого каждой части документа. Реляционные элементы, в свою очередь, подразделяются на элементы, описывающие взаимоотношения контейнеров, и элементы, задающие взаимоотношения между частями документа.

Части документа

Каждый документ содержит так называемую главную часть — все остальные элементы либо располагаются внутри этой главной части, либо так или иначе привязаны к ней. В зависимости от типа файла (текстовый документ, электронная таблица, презентация) главная часть может называться по-разному. Например:

Не все части документа сохраняются в XML-формате. Например, графические изображения (*.png, *.jpg, *.tiff) хранятся в оригинальном формате, что делает более удобным доступ к ним и выполнение соответствующих манипуляций. Помимо этого в бинарном виде хранятся VBA-проекты и внедренные в документы OLE-объекты. Части документа, сохраняемые в XML-формате, соответствуют схемам, определенным для того или иного фрагмента документа.

Реляционные элементы

Как мы увидели выше, для каждого типа документа главная часть располагается в соответствующей папке контейнера и имеет собственное название. Реляционный элемент с именем officeDocument (схема http://schemas.microsoft.com/office/2006/relationships/officeDocument) позволяет обнаружить главную часть любого документа — он хранится в файле с расширением *.rels в папке _rels. Файл *.rels содержит описание взаимоотношений фрагментов документа в следующем формате:

<Relationship Id=”relId” Type=”relationshipType”, Target = “target Part” />

где:

  • Id — строковый идентификатор взаимоотношения, который должен иметь уникальное в рамках файла имя;
  • Type — описывает тип взаимоотношения, указывает на схему, которая определяет тип для данного формата. Существует ряд предопределенных типов, часть из которых показана ниже:

http://schemas.microsoft.com/office/2006/relationships/officeDocument

http://schemas.microsoft.com/office/2006/relationships/image

http://schemas.microsoft.com/office/2006/relationships/sound

http://schemas.microsoft.com/office/2006/relationships/oleObject

http://schemas.microsoft.com/office/2006/relationships/activeXControl

http://schemas.microsoft.com/office/2006/relationships/diagram

  • Target — указывает на папку и файл, в которых располагается описываемый фрагмент документа.

Папка _rels имеет ключевое значение для всего процесса сохранения офисных документов в формате XML. Взаимоотношения между частями документа всегда задаются именно в этой папке. Упомянутое выше взаимоотношение officeDocument является взаимоотношением на уровне контейнера — другими словами, оно описывает весь контейнер и потому хранится в папке _rels в корне контейнера. Если же требуется найти описание взаимоотношений между частями документа, то в случае Microsoft Word 2007 его следует искать в файле document.xml — он будет находиться в подкаталоге word каталога _rels. Итеративный просмотр содержимого этого файла позволит вам обнаружить все части документа и взаимоотношения между ними.

Типизованные элементы

Как мы уже отмечали, типизованные элементы содержат метаданные, описывающие файловый тип каждой части документа. К частям документа могут относиться простой текст (text/plain), графическое изображение (image/jpeg) или более абстрактные понятия, например XML-документ (application/xml). Реляционные элементы также имеют соответствующие типизованные элементы, служащие для описания взаимоотношений. Множество типизованных элементов позволяет потребителям XML-файлов получить представление не только о его содержимом, но и о том, как интерпретировать и отрисовывать отдельные части документа.

Типизованные элементы хранятся вместе, в одном элементе с именем [Content_Types].xml в корневой папке контейнера. Типизованный элемент по умолчанию обычно ассоциируется с расширением имени файла, например *.xml или *.jpg. Типизованный элемент override может указывать на то, что данный фрагмент имеет указанный тип независимо от расширения имени файла.

Встроенные объекты

Формат Office Open XML может включать любое число встроенных объектов, которые могут принадлежать к любому типу. Эта возможность, пришедшая на смену неэффективному кодированию Base64, которое использовалось в предыдущих версиях продукта, сделала файлы более гибкими и удобными для обработки.

Например, вставка графического изображения в документ Word 2007 приведет к появлению в контейнере следующих элементов:

  • в файл [Content_Types).xml будет добавлено описание типа, связывающего расширение файла *.jpg с to image/jpeg;
  • папка media, созданная в папке word, будет содержать копию вставленного в документ графического изображения;
  • в файле document.xml, который находится в папке word, будет вставлена ссылка на новое взаимоотношение;
  • в файле document.xml.rels (находящийся в папке word) будет добавлено новое взаимоотношение, которое будет ссылаться на соответствующий элемент в файле document.xml.

После рассмотрения основных характеристик контейнеров и входящих в них элементов хотелось бы более подробно обсудить, как выглядит содержимое файлов, создаваемых в Word 2007, Excel 2007 и PowerPoint 2007.

Детали реализации

В данном разделе мы рассмотрим, как описанный выше XML-формат используется при сохранении документов, создаваемых такими приложениями Microsoft Office 2007, как Word 2007, Excel 2007 и PowerPoint 2007.

Начнем с простого текстового документа, созданного с помощью Word 2007. На рис. 1 показано, как этот документ выглядит в редакторе.

Рис. 1. Документ, созданный средствами
Word 2007

Сохраненный документ имеет расширение *.docx и представляет собой ZIP-контейнер, который мы можем исследовать с помощью любой программы, позволяющей работать с ZIP-архивами. В качестве примера будем использовать программу WinZip. Ниже показана структура docx-файла, открытого в WinZip (рис. 2).

Рис. 2. Структура docx-файла

В файле [Content_Types).xml описаны все типизованные элементы, связанные с данным документом. Все типизованные элементы, уникальные для Word 2007, имеют префикс application/vnd.ms-word. Если типизованный элемент соответствует XML-файлу, то в конец URI добавляется «+xml». Типичными для Word 2007 типизованными элементами являются:

  • application/vnd.ms-word.comments+xml — содержит комментарии в формате XML;
  • application/vnd.ms-package.core-properties+xml — содержит свойства документа в формате XML;
  • image/png — графическое изображение в оригинальном формате.

Поскольку имеется возможность изменения имени любого фрагмента документа, в файле [Content_Types).xml описаны и ссылки на такие фрагменты. Например, вот как указывается местоположение таблицы шрифтов:

<Override PartName=”/word/fontTable.xml”

<ContentType=”application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml” />

Взаимоотношения между частями документа всегда располагаются в каталоге _rels. Для конкретного документа взаимоотношения описываются в файле document.xml.rels. Например:

<Relationships xmlns=”http://schemas.openxmlformats.org/package/2006/ relationships”>

<Relationship Id=”rId8″Type=http://schemas.openxmlformats.org/officeDocument/2006/relationships/footerTarget=”footer1.xml”/>

Здесь задается связь между схемой, описывающей нижний колонтитул документа, и файлом footer1.xml, в котором содержится сам колонтитул.

Более подробно прочитать о структуре XML-файла Word 2007 можно в документе «Walkthrough: Office 12 Word Open XML File Format», доступном на сайте MSDN.

Теперь создадим простую электронную таблицу — для этого воспользуемся Excel 2007. На рис. 3 показано, как эта таблица выглядит в Excel 2007.

Рис. 3. Таблица, созданная средствами
Excel 2007

Откроем файл sample.xlsx в WinZip и посмотрим на его структуру.

Как видно на рис. 4, структура xlsx-файла напоминает структуру docx-файла, но части документа имеют другие имена, отражающие назначение частей электронной таблицы, а не текстового документа. Типичными типизованными элементами для Excel 2007 будут:

Рис. 4. Структура xlsx-файла

  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml;
  • application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml.

В папке xl располагаются основные части электронной таблицы — workbook.xml, styles.xml, папка worksheets, папка drawings, папка charts и т.п. Взаимоотношения между частями документа описаны в файле workbook.xml.rels.

Более подробно прочитать о структуре XML-файла Excel 2007 можно в документе «Walkthrough: Office 12 Excel Open XML File Format», доступном на сайте MSDN.

Завершить рассмотрение примеров использования Office 2007 Open XML Format мы хотим простой презентацией, созданной в PowerPoint 2007. Ниже показано, как эта презентация выглядит в PowerPoint 2007 (рис. 5).

Рис. 5. Презентация, созданная средствами PowerPoint 2007

Откроем файл sample.pptx в программе WinZip и посмотрим на его структуру (рис. 6).

Рис. 6. Структура pptx-файла

Несмотря на то что в pptx-файле содержится значительно больше (по сравнению с docx- и xlsx-файлами) фрагментов, его структура легко узнаваема. Файл presentation.xml описывает всю презентацию, файл presentation.xml.rels — взаимоотношения между частями презентации. Типичными типизованными элементами для PowerPoint 2007 будут:

  • application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml;
  • application/vnd.openxmlformats-officedocument.presentationml.slideMaster+ xml;
  • application/vnd.openxmlformats-officedocument.presentationml.slide+xml;
  • application/vnd.openxmlformats-officedocument.presentationml.presentation. main+xml;
  • application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml.

Каждый слайд описан документом slide.xml, расположенным в каталоге slides. В каталогах theme и slideLayouts находятся xml-документы, описывающие различные шаблоны, применимые к слайдам.

Программные интерфейсы

Для работы с документами, сохраненными в формате Office 2007 Open XML Format, следует использовать классы, реализованные в пространстве имен System.IO.Packaging (библиотека WinFX, сборка windowsbase.dll). Подробное описание данного пространства имен можно получить в онлайновой версии документации к библиотеке WinFX, расположенной по адресу: http://windowssdk.msdn.microsoft.com/library/en-us/cpref12/html/N_System_IO_Packaging.asp.

Рассмотрим несколько примеров. Мы уже отмечали, что для успешной обработки документа в формате Office 2007 Open XML Format необходимо успешно найти главную часть документа, которая имеет тип http://schemas.microsoft.com/office/2006/relationships/officeDocument. Для документов, созданных средствами Word, главная часть хранится в файле document.xml, для электронных таблиц — в файле workbook.xml, а для презентаций — в файле presentation.xml. После того как главная часть документа найдена, мы получаем возможность обнаружить все остальные части документа. В приведенном примере показано, как найти главную часть (documentPart) офисного документа.

//

// Найти «главную часть» документа по заданному имени

файла

,,

public void FindStartPart(string fileName)

{

  string officeDocRelType =

   @”http://schemas.microsoft.com/office/2006/

   relationships/officeDocument”;

   PackagePart documentPart = null;

   Uri documentUri = null;

   //Открыть контейнер только для чтения

   using (Package officePackage = Package.

  Open(fileName,

    FileMode.Open, FileAccess.Read))

   {

   // Найти «главную часть»

    foreach (PackageRelationship relationship in

     officePackage.GetRelationshipsByType(office-

     DocRelType))

     {

     // В контейнере только одна «главная часть»

      documentUri = PackUriHelper.ResolvePartUri

      (new Uri(“/”, UriKind.Relative), relationship.

      TargetUri);

     documentPart = officePackage.GetPart(documentUri);

     break;

    }

    // Дальнейшая обработка

  }

}

После того как мы научились извлекать главную часть документа, давайте выясним, каким образом можно найти любую часть документа — для этого необходимо выполнить итерацию по описанию взаимоотношений частей. Ниже показано, как это сделать, на примере поиска комментариев в документе Word.

//

// Найти комментарии в документе

//

string commentsPartRelType =

 @”http://schemas.microsoft.com/office/2006/

   relationships/wordComments”;

PackagePart commentsPart = null;

Stream commentsXML = null;

//

//Итерация по всем взаимоотношениям в document.xml

//

foreach (PackageRelationship relationship in

 documentPart.GetRelationshipsByType(comments-

PartRelType))

 {

 //Комментарии = /word/comments.xml

 Uri commentsUri = PackUriHelper.ResolvePartUri

(documentUri,

  relationship.TargetUri);

  commentsPart = officePackage.GetPart(commentsUri);

  break;

 }

В приведенном примере мы использовали URI для нахождения адреса определенного фрагмента документа — это необходимо для того, чтобы не зависеть от имени фрагмента, которое может меняться по мере работы с документом. Последний пример, который мы рассмотрим, относится к удалению определенного фрагмента документа. Предположим, что мы хотим удалить из файла VBA-проект.

public void DeleteVBAPart(string fileName)

{

string officeDocRelType =

 @”http://schemas.microsoft.com/office/2006/

relationships/

 officeDocument”;

const string vbaRelationshipType =

 “http://schemas.microsoft.com/office/2006/

relationships/vbaProject”;

PackagePart documentPart = null;

Uri documentUri = null;

//

// Открыть контейнер на чтение

//

 using (Package officePackage = Package.Open

(fileName, FileMode.Open, FileAccess.ReadWrite))

  {

   // Получить «главную часть»

      foreach (PackageRelationship relationship in

        officePackage.GetRelationshipsByType

         (officeDocRelType))

      {

       documentUri = PackUriHelper.ResolvePartUri(new

     Uri(“/”, UriKind.Relative), relationship.

      TargetUri);

       documentPart = officePackage.GetPart(documentUri);

      break;

     }

   // Найти VBA project

     foreach (System.IO.Packaging.PackageRelation-

    ship relationship

     in documentPart.GetRelationshipsByType

    (vbaRelationshipType))

      {

       Uri vbaUri = PackUriHelper.ResolvePartUri

         (documentUri,

        relationship.TargetUri);

      PackagePart vbaPart = officePackage.GetPart

     (vbaUri);

     // Удалить VBA project

            officePackage.DeletePart(vbaUri);

            // Удалить ссылку на VBA

          documentPart.DeleteRelationship

           (relationship.Id);

            break;

      }

// Закрыть контейнер

   officePackage.Close();

   }

}

Приведенные примеры помогут вам составить общее представление о том, как использовать классы System.IO.Packaging для работы с документами в формате Office 2007 Open XML Format. В ближайшее время Microsoft планирует опубликовать значительное число примеров использования этого программного интерфейса — следите за новинками на сайте MSDN (http://msdn.microsoft.com).

Сценарии использования документов в XML-формате

Возможность манипуляции частями офисных документов либо посредством редакторов XML-файлов, либо через вышеупомянутые программные интерфейсы открывает перед разработчиками ряд новых сценариев, которые мы хотим кратко описать. К новым сценариям можно отнести следующие:

  • обмен данными — открытость формата офисных документов делает их полноценными участниками бизнес-процессов — появляется возможность извлечения или вставки данных в документы, персонализации документов при их рассылке конечным потребителям, использования настраиваемых схем и т.п.;
  • управление содержимым документов — у разработчиков появляется возможность редактирования содержимого документов: обновления данных, изменения отдельных частей документа, удаления или добавления новых частей;
  • повторное использование фрагментов документов — модульность нового формата офисных документов позволяет повторно задействовать фрагменты документов — использовать их как строительные блоки для создания новых документов;
  • сборка документов на лету — у разработчиков появляется возможность создания офисных документов на лету, как используя готовые части документов (например, отдельные слайды), так и полностью генерируя документы с нуля путем реализации серверных сценариев, недоступных для более ранних версий Office;
  • обеспечение безопасности — возможность манипуляции VBA-проектами внутри офисных документов делает их более безопасными. Простое изменение расширения имени файла гарантирует, что макросы, расположенные внутри документа, не будут выполняться. Помимо этого открытость офисных документов делает более простой работу антивирусных приложений и всевозможных сканеров;
  • управление конфиденциальной информацией — открытость офисных документов упрощает управление конфиденциальной информацией, позволяя динамически создавать версии документов, не содержащие информацию для служебного пользования, и таким образом значительно сокращая затраты на создание документов, предназначенных для сторонних клиентов.

Более подробную информацию о новых продуктах семейства Microsoft Office 2007 можно получить на сайте MSDN в разделе, посвященном разработке на этой платформе, — http://www.microsoft.com/office/preview/default.mspx.

КомпьютерПресс 6’2006

Немного об Excel и XML

Итак, прежде чем узнать, как открыть, создать или перевести файл XML в Excel и обратно, давайте поближе познакомимся с типами этих файлов. Здесь нужно сразу отметить, что документы Excel имеют множество форматов, в то время, как XML — и есть формат файла. Поэтому не стоит путать эти два понятия.

Скриншот Microsoft Excel

Microsoft Excel является мощной программой для вычислений с множеством полезных функций

Программа Microsoft Excel является специальной утилитой, предназначенной для создания и редактирования таблиц. С ними вы уже можете делать всё что угодно: создавать базы, диаграммы, формулы и другие типы данных. Это очень мощный инструмент, поэтому все его возможности мы обсуждать не будем. Сегодня наша цель несколько другая, и мы не станем отходить от темы сегодняшней дискуссии.

Файлы XML, для более простого понимания, предназначены для хранения, обмена различных данных между утилитами. Особенно часто пользуются этим языком разметки при передаче информации через интернет. И когда вам нужно перенести табличные данные из Экселя на сайт, например, то вам нужно будет преобразовать свой документ, чтобы он правильно отображался. Поэтому давайте не будем оттягивать момент истины и сразу приступим к выполнению операции.

Как преобразовать Excel в XML

Дорогие друзья, на самом деле преобразование файлов является достаточно простым занятием. Однако, у некоторых пользователей могут возникнуть проблемы при переносе данных, поэтому сегодня мы с вами рассмотрим несколько способов для осуществления нашего замысла. Поэтому набираемся терпения и приступаем к действиям:

  1. Самый простой способ, который может не сработать в некоторых случаях, это сохранение файла в нужном формате в самой программе Microsoft Excel. Для этого откройте необходимый документ в этом приложении. Затем нажмите на кнопку «Файл» (рассматривается на примере Office 2013, в других версиях процесс сохранения может несколько отличаться) в верхнем левом углу окна Экселя, затем пункт «Сохранить как», после чего выберите место сохранения документа, дайте ему имя и во вкладке типа файла укажите «XML данные». После этого проверьте, правильно ли всё у вас получилось. Если нет, то пробуем следующие способы.
  2. Итак, если возникает ошибка в предыдущем случае, то, возможно, в вашей копии программы не предусмотрена поддержка и соответствующие надстройки. Чтобы их установить, скачайте и инсталлируйте этот файл к себе на компьютер или ноутбук. Это плагин XML Tools Add-in. Далее, запустите программу Microsoft Excel и нажмите на большую цветную кнопку в левом верхнем углу окна приложения (здесь мы уже смотрим пример на версии 2007-го года). В появившемся блоке кликните по параметрам, слева от выхода из утилиты. Теперь зайдите в пункт надстроек и нажмите на кнопку «Перейти» напротив пункта «Управление». Выскочит диалоговое окно, где нужно кликнуть по обзору и найти документ, который вы скачали с сайта Майкрософта ранее. Теперь кликаем ОК и переходим в основное окно программы, где у вас теперь есть вкладка XML Tools — с помощью него теперь вы спокойно можете создать файл XML из существующей таблицы. Сохранять его нужно аналогично предыдущему пункту.
  3. Если вам совсем не хочется загружать и себя, и свой компьютер такой информацией, то можете прибегнуть к помощи специальных утилит-конвертеров или онлайн-версий этих программ. К примеру, вы можете загрузить приложение Format Factory, которое позволит вам совершить все необходимые действия. Но стоит помнить, что сохранённые и преобразованные таким образом файлы не всегда работают в дальнейшем. То есть во время операции могут повредиться сектора или области в памяти документа, что негативно скажется на нём — он попросту может не открыться в XML-редакторе, например. Поэтому рекомендуется использовать либо профессиональные программы, либо сам Microsoft Excel.

Microsoft Excel скриншот

Как перевести XML в Excel

Прежде чем перевести XML в Excel, нужно его для начала открыть. Рассмотрим весь этот непродолжительный процесс ниже. Итак, приступаем:

  1. Запустите программу Microsoft Excel с помощью ярлыка на рабочем столе или через меню проводника.
  2. Нажмите на «Открыть другие книги» внизу главной страницы, если вы используете Office В других версиях процесс может несколько отличаться.
  3. Далее, нажимаем на «Компьютер» или другое место, где расположен ваш XML-файл, затем кликните «Обзор» и смените в появившемся окне тип данных на «Файлы XML».
  4. Теперь ищем необходимый файл и открываем его в нашей программе с помощью одноимённой кнопки.
  5. Далее, обсудим то, как преобразовать наш документ. Перейдите во вкладку разработчика, затем нажмите на кнопку импорта.
  6. В открывшемся окне нужно будет снова найти и выбрать наш документ, над которым вы и хотите произвести действие, затем кликаем на кнопку «Импорт».
  7. Затем настраиваете всё под себя: область для импорта, место сохранения и другие параметры. После чего вы получите таблицу, которую позже можно сохранить в нужном для вас формате. Как видите, ничего сложного нет.

Подведём итоги

Дорогие читатели, сегодня мы с вами узнали не только как преобразовать файлы XML в Excel и обратно, но и как создать и открыть их при несовместимости версий. Надеемся, что у вас всё получилось и больше не осталось никаких вопросов. Не забываем делиться в комментариях своим мнением и опытом: возможно, вы знаете простой способ конвертации. Расскажите другим пользователям, получилось ли у вас перевести один тип документа. Если сработало, то поделитесь тем, каким способом воспользовались вы.

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

Здравствуйте, прошу помощи у специалистов!  

  Столкнулся с необходимостью преобразовать файл с расширением XML в файл Excel.. Как можно это сделать при помощи Excel 2003 или 2007 и можно ли это вообще сделать?  

  Для наглядности прилагаю два файла от поставщиков (в архиве): один в формате XML, второй в формате Excel (наименования товаров, кол-во, цена и остальные данные — идентичные, а расширение файлов разное).. Это для наглядности, для примера (т.к. в данном случае уже имеются файлы и XML  и конвертированный Excel)..  

  Соответственно вопрос: как из файла с расширением XML получить файл в формате Excel?    
Какой порядок действий вообще, какие программы для этого используются?  
<EM><STRONG>Файл удален</STRONG> — велик размер — [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

легко, в 2003 — точно не помню — вроде бы данные — внешние данные — импорт из xml.  
в 2007 точно — вкладка разработчик — блок xml на панели — кнопка импорт — указываете путь. На вопрос про схему документа — ответьте да. все.

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

{quote}{login=egonomist}{date=02.09.2011 04:41}{thema=}{post}легко, в 2003 — точно не помню — вроде бы данные — внешние данные — импорт из xml.  
в 2007 точно — вкладка разработчик — блок xml на панели — кнопка импорт — указываете путь. На вопрос про схему документа — ответьте да. все.{/post}{/quote}  

  Спасибо, данный вариант пробовал. Почему-то получается разная структура, я наверное не понимаю просто ((  

  Модератор удалил прикрепленный файл из-за большого размера, выкладываю файл меньшего размера..    
Посмотрите, пожалуйста, можно ли из исходного файла (XML) получить в точности такой же как в прикрепленном файле Ecxel при помощи тех манипуляций, о которых Вы пишите..

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

пишу как в 2007 так как другого нету под рукой.  
вкладка разработчик — на панели инструментов бок xml.  
щелкаем источник  
нажимаем кнопку карты xml — добавить — выбираем наш файл — со всем соглашаемся.  
в итоге в правой панельке появляется древовидная структура xml.  
перетаскиваем нужные нам поля в нужные нам столбцы.  
после перетаскивания ячейки становятся синего цвета.  
щелкаем правой кнопкой на любой синюшности — обновить.  
Вуаля — готово — загрузились данные.  
На панели стали активными данные — обновить данные, парметры и др.  
Теперь можно обновлять файл xml — заходить в табличку и щелкать обновить  
Единственное что — надо будет поработать со столбцом картинки — чтоб путь лепил из имеющихся столбцов в xml.  
Enjoy.

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

надеюсь разберетесь — я вотпуск.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=egonomist}{date=02.09.2011 05:31}{thema=}{post}надеюсь разберетесь — я вотпуск.{/post}{/quote}Хорошо отдохнуть!  

  =77116=

 

{quote}{login=egonomist}{date=02.09.2011 05:29}{thema=}{post}пишу как в 2007 так как другого нету под рукой.  
вкладка разработчик — на панели инструментов бок xml.  
щелкаем источник  
нажимаем кнопку карты xml — добавить — выбираем наш файл — со всем соглашаемся.  
в итоге в правой панельке появляется древовидная структура xml.  
перетаскиваем нужные нам поля в нужные нам столбцы.  
после перетаскивания ячейки становятся синего цвета.  
щелкаем правой кнопкой на любой синюшности — обновить.  
Вуаля — готово — загрузились данные.  
На панели стали активными данные — обновить данные, парметры и др.  
Теперь можно обновлять файл xml — заходить в табличку и щелкать обновить  
Единственное что — надо будет поработать со столбцом картинки — чтоб путь лепил из имеющихся столбцов в xml.  
Enjoy.{/post}{/quote}  

  Спасибо! Буду пробовать.. Надеюсь, что все получится.. Хорошего Вам отпуска!  
(хотя мне немного жаль, т.к. если не выйдет все так как надо — то больше помощи мне ждать не откуда, этот форум — моя последняя надежда)  

  Вопрос тогда к Вам встречный: можно ли будет просить Вас о помощи в этом вопросе, в случае, если все окажется сложнее? (не безвозмездно, уже, конечно)

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

{quote}{login=egonomist}{date=02.09.2011 05:29}{thema=}{post}пишу как в 2007 так как другого нету под рукой.  
вкладка разработчик — на панели инструментов бок xml.  
щелкаем источник  
нажимаем кнопку карты xml — добавить — выбираем наш файл — со всем соглашаемся.  
в итоге в правой панельке появляется древовидная структура xml.  
перетаскиваем нужные нам поля в нужные нам столбцы.  
после перетаскивания ячейки становятся синего цвета.  
щелкаем правой кнопкой на любой синюшности — обновить.  
Вуаля — готово — загрузились данные.  
На панели стали активными данные — обновить данные, парметры и др.  
Теперь можно обновлять файл xml — заходить в табличку и щелкать обновить  
Единственное что — надо будет поработать со столбцом картинки — чтоб путь лепил из имеющихся столбцов в xml.  
Enjoy.{/post}{/quote}  

  Попробовал.. Все именно так получилось, как Вы и описывали, на выходе получил такой же файл, кот Вы прикрепили к сообщению, НО когда попробовал конвертировать другой файл (именно файл от поставщика) — то получилось не совсем так..  

  Видимо в данном файле структура более многоуровневая (разделов и подразделов товаров больше) + сама структура XML видимо отличается (я, к сожалению не специалист в XML)  

  Может быть есть тут еще специалисты, кот направят меня в нужном направлении..  

  Выкладываю файл, над которым я работаю..  

  В нем у меня не получается сделать так, чтобы названия категорий и подкатегорий товаров были непосредственно в каждой строке, а не общим списком в начале таблицы,    
т.е., чтобы было сопоставление: Раздел / Подраздел / ПодПодраздел / Товар  

  В прикрепленном файле я проследил цветом взаимосвязь между разделами, подразделами, к которым относится тот или иной товар и подумал, может имеет смысл написать макрос для того, чтобы значения были автоматически сопоставлены со строками товаров??  

  Или я не правильно конвертирую XML в Excel??  
<EM><STRONG>Файл удален</STRONG> — велик размер — [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

mstrneo, Вам в правила. Срочно. А тему закроют за повторное нарушение. Не понимаю, вы что нарочно модераторов злите?

Я сам — дурнее всякого примера! …

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

{quote}{login=KukLP}{date=03.09.2011 05:27}{thema=}{post}mstrneo, Вам в правила. Срочно. А тему закроют за повторное нарушение. Не понимаю, вы что нарочно модераторов злите?{/post}{/quote}  

  Приношу свои извинения, если я где-то нарушил правила, злить конечно же не хотел никого.. просто очень нужна помощь, а сроки горят ((

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

«если я где-то нарушил правила» — так прочитайте их и исправьте нарушение, пока тему не закрыли. Не, мне все равно. Вам помощь нужна…

Я сам — дурнее всякого примера! …

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

{quote}{login=KukLP}{date=03.09.2011 07:06}{thema=}{post}»если я где-то нарушил правила» — так прочитайте их и исправьте нарушение, пока тему не закрыли. Не, мне все равно. Вам помощь нужна…{/post}{/quote}  

  Спасибо, осознал, каюсь, исправил нарушения ))  

  прикрепляю файл меньшего размера (50 Кб)  

  В нем у меня не получается сделать так, чтобы названия категорий и подкатегорий товаров были непосредственно в каждой строке, а не общим списком в начале таблицы,    
т.е., чтобы было сопоставление: Раздел / Подраздел / ПодПодраздел / Товар    
(строка 158 в файле и далее вниз до конца таблицы)  

  В прикрепленном файле я проследил цветом взаимосвязь между разделами и подразделами, к которым относится тот или иной товар и подумал, может имеет смысл написать макрос для того, чтобы значения были автоматически сопоставлены со строками товаров??  

  Или существуют какие-то дополнительные настройки преобразования XML в Excel, при помощи которых эта проблема решается??

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

Странно, неужели нет специалистов в этом вопросе?  

  Может быть есть конвертер какой-то кроме Excel?  

  Или программы, которые смогут пропарсить данные сразу в базу MySQL?  

  Уверен, что я не один таким вопросом задался, как закачать товары в базу данных интернет-магазина из XML (YML) файла ((

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

mstrneo, специалисты может и есть, но! Я смотрел Ваш последний файл еще 03.09.2011. Там же черт ногу сломает. Так ничего и не понял. Может отдельно XML выложите, или если размер не позволяет, ссылку на него? Сразу оговорюсь — не специалист. Но, хоть попытаюсь…  

  56336

Я сам — дурнее всякого примера! …

 

{quote}{login=KukLP}{date=06.09.2011 08:57}{thema=}{post}mstrneo, специалисты может и есть, но! Я смотрел Ваш последний файл еще 03.09.2011. Там же черт ногу сломает. Так ничего и не понял. Может отдельно XML выложите, или если размер не позволяет, ссылку на него? Сразу оговорюсь — не специалист. Но, хоть попытаюсь…  

  56336{/post}{/quote}  

  Размер не позволяет, выкладываю ссылки на файлы:  

http://neomarket.su/yml.rar  

Это файл, над которым я бьюсь, его пытаюсь конвертировать в Excel для того, чтобы загрузить товары в базу.  

http://neomarket.su/konvertiroval.rar  

Это то, что у меня получилось после импорта в Excel..  
Почти получилось на самом деле, проблема только сопоставить каждому товару категорию и подкатегорию, к которым он относиться. Взаимосвязь идет за счет идентификаторов (язык XML, который их связывает):  

  колонки: category,  id, parent — это категории и подкатегории товаров  
колонка categoryId связывает товары (наименование, описание, цену) с категориями и подкатегориями  

  Таким образом через данные идентификаторы и язык XML все и связывается (какой товар к какой категории относится)  

  Вопрос состоит в том, чтобы уйти от языка XML и преобразовать все в Excel так, как это сделал другой поставщик, который любезно предоставил нам файлы своих товаров как в XML формате, так и в Excel.  
Выкладываю так же и эти файлы. Это будет наверное нагляднее, т.к. имеем один и тот же список товаров, но уже конвертированный в разных форматах):  

http://neomarket.su/production.rar  

В Excel файле стоит обратить внимание на столбцы, отмеченные желтым цветом, именно к такому формату данных и необходимо прийти..  
Группа1, Группа2, Группа3, Группа4 — это Катагория / Подкатагория / ПодПодкатагория / ПодПодПодкатегория (находятся они в одной строке с наименованием и описанием каждого товара, чего собственно и необходимо добиться)..

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Почему не позволяет? Вот Ваш файл. Только понятней не стало:-( Что с чем и как сопоставлять. Давайте так — столбцы A:F не нужны, там одинаковые значения. Из столбцов G:I по каким признакам подставлять значения ниже 157 строки? Или я все неправильно понял?

Я сам — дурнее всякого примера! …

 

{quote}{login=KukLP}{date=07.09.2011 12:15}{thema=}{post}Почему не позволяет? Вот Ваш файл. Только понятней не стало:-( Что с чем и как сопоставлять. Давайте так — столбцы A:F не нужны, там одинаковые значения. Из столбцов G:I по каким признакам подставлять значения ниже 157 строки? Или я все неправильно понял?{/post}{/quote}  

  Все эти столбцы как раз и нужны..  

  Алгоритм такой:  

  1) Ячейка 158 должна содержать данные:  
     а) из К158 (в столбце categoryId содержится идентификатор категории) берем значение (в данном случае это: __19I3VAO)  
     б) далее находим это значение в колонке Id (столбец D)  
     в) этому значению соответствует название Подкатегории в колонке category (столбец C) — Украшения фигурные  
     г)  далее смотрим, корневая ли это категория, или есть уровень выше (категория не корневая, а является подразделом вышестоящей категории):  
если в ячейке справа (Е22) есть значение (ячейка не пустая), значит есть уровень выше, продолжаем (заполняется ячейка слева — D158)  
     д) берем значение из ячейки справа (Е22) и как в пункте «б» находим это значение в колонке Id (столбец D). В данном случае это значение ___RLMVAO, этому значению соответствует название Категории в колонке category (столбец С) — Украшения и шары из современных материалов  
     е) Опять, как в пункте «г» смотрим, корневая ли это категория, или есть уровень выше (категория не корневая, а является подразделом вышестоящей категории):  
если в ячейке справа (Е8) есть значение (ячейка не пустая), значит есть уровень выше, продолжаем (заполняется ячейка С 158)  
     ж) берем значение из ячейки справа (Е8) и как в пункте «б» находим это значение в колонке Id (столбец D). В данном случае это значение ___RLEVAO, этому значению соответствует название Категории в колонке category (столбец С) — Mister Christmas  
     з) Опять, как в пункте «г» смотрим, корневая ли это категория, или есть уровень выше (категория не корневая, а является подразделом вышестоящей категории):  
если в ячейке справа (Е1) есть значение (ячейка не пустая), значит есть уровень выше, заполняется ячейка слева (B158), но ячейка (E1) пустая => категория корневая  

  Значения сопоставляются именно в такой последовательности, в итоге получаем значения в строке 158.    
(Начинается сопоставление с колонки categoryId (столбец К) с колонкой Id (столбец D) и далее по пунктам..  

  Т.е. теоретически данный алгоритм можно реализовать при помощи макроса, но тут я тоже не специалист ((

 

И фактически сопоставить надо 4 столбца:    
C, D, E, K

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#20

07.09.2011 10:25:10

{quote}{login=}{date=07.09.2011 03:00}{thema=}{post}И фактически сопоставить надо 4 столбца:    
C, D, E, K{/post}{/quote}  
Если ооочень нужно решение, пишите в почту.

Спасибо

 

{quote}{login=R Dmitry}{date=07.09.2011 10:25}{thema=Re: }{post}{quote}{login=}{date=07.09.2011 03:00}{thema=}{post}И фактически сопоставить надо 4 столбца:    
C, D, E, K{/post}{/quote}  
Если ооочень нужно решение, пишите в почту.{/post}{/quote}  

  Ооочень нужно!  
Только, что писать? По идее я уже и не знаю, что дополнить-то..

 

mstrneo

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

Могу наверное ICQ номер написать для более оперативного общения:  
340924537  
или почта:  
info@neomarket.su

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#23

12.09.2011 02:05:04

Старт топику, конечно, более универсальный сделал, но основной алгоритм приведу

Прикрепленные файлы

  • post_258566.xls (41 КБ)

Спасибо

 

Guest

Гость

#24

11.09.2012 12:14:20

Где эта вкладка «разработчик» ?


22 Sep 2006 | by
| Filed in

  • PDF
  • .NET
  • C#
  • XML
  • VB.NET
  • VBA

Excel 2007 extends on the basis of Open Packaging Conventions by adding its own application-specific XML types. Reference schemas for all XML files used in Office can be downloaded from MSDN, but note some things are still open to change until the final Excel 2007 release.

We just want to write / read worksheet data, so we need to look in folder “xlworksheets” inside XLSX file, where all the worksheets are located. For every worksheet there is a separate XML file; “sheet1.xml”, “sheet2.xml” and so on. When you open such file you will notice that all of the sheet data is inside <sheetData> element. For every row there is a <row> element, for every cell there is a element. Finally, value of the cell is stored in a element.
However, real world XML is never simple as schoolbook XML. You will notice that numbers get encoded as numbers inside element:

<c r="A1">
   <v>100</v>
</c>

However, string value (like “John”), also gets encoded as number:  

<c r="B1" t="s"> 
<v>0</v>
</c>

That is because MS Excel uses internal table of unique strings (for performance reasons). Zero is an index of that string in an internal table of strings and attribute t="s" tells us that underlying type is a string, not a number. So where is the table of unique strings located? It is in “xlsharedStrings.xml” XML file, and contains all strings used in entire workbook, not just specific worksheet.

This approach is used for many other things; cell styles, borders, charts, number formats etc. In fact, that becomes the major programming problem when working with XLSX files – updating and maintaining various tables of some unique Excel objects. In this article we will just write / read data values, but if you require some complex formatting you should probably be better using some commercial component which does all tedious work for you.

I have a dataset that I have modified into an xml document and then used a xsl sheet to transform into an Excel xml format in order to allow the data to be opened programatically from my application. I have run into two problems with this:

  1. Excel is not the default Windows application to open Excel files, therefore when Program.Start(«xmlfilename.xml») is run, IE is opened and the XML file is not very readable.

  2. If you rename the file to .xlsx, you receive a warning, «This is not an excel file, do you wish to continue». This is not ideal for customers.

Ideally, I would like Windows to open the file in Excel without modifying the default OS setting for opening Excel files. Office interop is a possibility, but seems like a little overkill for this application. Does anyone have any ideas to make this work?

The solution is in .Net/C#, but I am open to other possibilities to create a clean solution.

asked Sep 16, 2008 at 23:10

Trevor Abell's user avatar

Trevor AbellTrevor Abell

7322 gold badges9 silver badges15 bronze badges

If you insert the following into the 2nd line of your XML it directs Windows to open with Excel

<?mso-application progid="Excel.Sheet"?>

answered Sep 17, 2008 at 12:51

Jason Z's user avatar

Jason ZJason Z

13.1k15 gold badges49 silver badges62 bronze badges

Process.Start(@"C:Program FilesMicrosoft OfficeOfficexxexcel.exe", "yourfile.xml");

That being said, you will still get the message box. I suppose that you could use the Interop, but I am not sure how well it will work for you.

answered Sep 16, 2008 at 23:19

MagicKat's user avatar

MagicKatMagicKat

9,6156 gold badges32 silver badges43 bronze badges

1

What if you save the file as an xlsx, the extension for XML-Excel?

answered Sep 16, 2008 at 23:12

sgwill's user avatar

sgwillsgwill

9,6648 gold badges34 silver badges40 bronze badges

2

As Sam mentioned, the xlsx file extension is probably a good route to go. However, there is more involved than just saving the xml file as xlsx. An xlsx is actually a zip file with a bunch of xml files inside folders. I found some good sample code here which seems to give some good explanations although I haven’t personally given it a try.

answered Sep 16, 2008 at 23:21

Bryant's user avatar

BryantBryant

8,6601 gold badge33 silver badges53 bronze badges

Apologies in advance for plugging a third party library, and I know it’s not free, but I use FlexCel Studio from TMS Software. If you’re looking to do more than just dump data (formatting, dynamic cross-tabs, etc) it works very well. We generate hundreds of reports a week using it.

FlexCel accepts strongly-typed datasets, it can group data according to relationships, and the generated Excel file looks so much cleaner than what you can get from a Crystal Reports excel export. I’ve done the crystal reports thing, and the OLE automation thing. FlexCel is a steal at $125 EU.

answered Sep 17, 2008 at 1:05

Dave Neeley's user avatar

Dave NeeleyDave Neeley

3,4881 gold badge24 silver badges42 bronze badges

Hope this helps.

OpenXML in MSDN — http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.openxml(v=office.11).aspx

using Excel = Microsoft.Office.Interop.Excel;

string workbookPath= @"C:tempResults_2013Apr02_110133_6692.xml";

            this.lblResultFile.Text = string.Format(@" File:{0}",workbookPath);
            if (File.Exists(workbookPath))
            {
                Excel.Application excelApp = new Excel.Application();
                excelApp.Visible = true;
                Excel.Workbook excelWorkbook = excelApp.Workbooks.OpenXML(workbookPath, Type.Missing, Excel.XlXmlLoadOption.xlXmlLoadPromptUser);
            }
            else
            {
                MessageBox.Show(String.Format("File:{0} does not exists", workbookPath));
            }

answered Apr 2, 2013 at 19:57

aked's user avatar

akedaked

5,5352 gold badges27 silver badges33 bronze badges

Like this post? Please share to your friends:
  • Xml file for excel
  • Xml excel visual basic
  • Xml excel for mac
  • Xml with excel 2010
  • Xml with excel 2007