Použití formátu XML sady Office a součástí obalu rozhraní.NET Framework 3.0 vytvořit jednoduchý sešitu aplikace Excel 2007 nebo jednoduchý dokument aplikace Word 2007

ÚVOD

Tento článek popisuje způsob použití formátu XML aplikace Microsoft Office a součástí balení z Microsoft rozhraní.NET Framework 3.0 k vytvoření jednoduché aplikace Microsoft Office Excel 2007 sešitu nebo jednoduchý dokument Microsoft Office Word 2007.

Další informace

Příklady kódu v tomto článku, vytvořte nový sešit aplikace Excel nebo do nového dokumentu, který obsahuje text "Hello World" bez automatizace aplikace Excel 2007 nebo Word 2007.

Požadavky na klienta

  • Microsoft Visual Studio 2005 nebo Microsoft Visual C# 2005
  • Rozhraní.NET Framework 3.0
  • Visual Studio 2005 Extensions pro rozhraní.NET Framework 3.0
  • Aplikace Excel 2007 nebo Word 2007

Podrobný příklad

Vytvoření aplikace založené na systému Windows

  1. Spusťte aplikaci Visual Studio 2005 nebo Visual C# 2005.
  2. Vytvořte novou aplikaci Visual C# Windows.
  3. Přidáte odkaz na knihovně Windowsbase.dll sestavení.

    Poznámka: Pokud knihovně Windowsbase.dll odkaz se nezobrazí v dialogovém okně Přidat odkaz na kartě .NET , klepněte na kartu Procházet , vyhledejte složku C:\Program Files\Reference assemblies\Microsoft\Framework\v3.0 a potom klepněte na tlačítko knihovně WindowsBase.dll.
  4. V aplikaci Visual Studio klepněte na tlačítko
    Kód v nabídce Zobrazit přejděte do zobrazení kódu.
  5. Ve třídě Form1 přidejte následující direktivy.
    using System.Xml;
    using System.IO;
    using System.IO.Packaging;


Přidáním kódu vytvořit sešit aplikace Excel

  1. V aplikaci Visual Studio klepněte na tlačítko
    Návrhář v nabídce zobrazení přepnout do návrhového zobrazení formuláře.
  2. Přidání ovládacího prvku tlačítko do formuláře systému Windows. Chcete-li Vytvořit sešit aplikace Excel, nastavte vlastnost Texttlačítka.
  3. Poklepejte na tlačítko Generovat
    obslužné rutiny události Button1_Click .
  4. Následující příklad kódu, můžete přidat
    obslužné rutiny události Button1_Click . Nový kód obslužné rutiny události by měl vypadat následujícím příkladu kódu.
    private void button1_Click(object sender, EventArgs e)        {
    //Create the XML documents.
    XmlDocument workbookDoc = null;
    workbookDoc = CreateExcelXML("workbook");

    XmlDocument worksheetDoc = null;
    worksheetDoc = CreateExcelXML("worksheet");

    XmlDocument sharedstringsDoc = null;
    sharedstringsDoc = CreateExcelXML("sharedstrings");

    //Create the Excel package.
    Package xlPackage = null;
    xlPackage = CreateExcelWorkbookPackage("HelloWorld.xlsx");

    //Add the parts to the Excel package.
    if (xlPackage != null)
    {
    //Add the workbook part.
    AddExcelPart(xlPackage, "workbook", workbookDoc);

    //Add the worksheet part.
    AddExcelPart(xlPackage, "worksheet", worksheetDoc);

    //Add the sharedstrings part.
    AddExcelPart(xlPackage, "sharedstrings", sharedstringsDoc);

    }

    //Save the changes, and then close the package.
    if (xlPackage != null)
    {
    xlPackage.Flush();
    xlPackage.Close();
    }

    MessageBox.Show("Successfully created Excel workbook");
    }

  5. Přidáte následující příklad kódu do třídy Form1 . Tento příklad kódu vytvoří a vloží XML součásti, které obsahují listy aplikace Excel.
      private XmlDocument CreateExcelXML(string partType)        {
    switch (partType)
    {
    case "workbook":
    //Create a new XML document for the workbook.
    XmlDocument workbookDoc = new XmlDocument();

    //Obtain a reference to the root node, and then add
    //the XML declaration.
    XmlElement wbRoot = workbookDoc.DocumentElement;
    XmlDeclaration wbxmldecl =
    workbookDoc.CreateXmlDeclaration
    ("1.0", "UTF-8", "yes");
    workbookDoc.InsertBefore(wbxmldecl, wbRoot);

    //Create and append the workbook node
    //to the document.
    XmlElement workBook =
    workbookDoc.CreateElement("workbook");
    workBook.SetAttribute("xmlns",
    "http://schemas.openxmlformats.org/" +
    "spreadsheetml/2006/main");
    workBook.SetAttribute("xmlns:r",
    "http://schemas.openxmlformats.org/officeDocument/" +
    "2006/relationships");
    workbookDoc.AppendChild(workBook);

    //Create and append the sheets node to the
    //workBook node.
    XmlElement sheets = workbookDoc.CreateElement("sheets");
    workBook.AppendChild(sheets);


    //Create and append the sheet node to the
    //sheets node.
    XmlElement sheet = workbookDoc.CreateElement("sheet");
    sheet.SetAttribute("name", "Sheet1");
    sheet.SetAttribute("sheetId", "1");
    sheet.SetAttribute("id",
    "http://schemas.openxmlformats.org/" +
    "officeDocument/2006/relationships","rId1");
    sheets.AppendChild(sheet);

    return workbookDoc;

    case "worksheet":
    //Create a new XML document for the worksheet.
    XmlDocument worksheetDoc = new XmlDocument();

    //Get a reference to the root node, and then add
    //the XML declaration.
    XmlElement wsRoot = worksheetDoc.DocumentElement;
    XmlDeclaration wsxmldecl =
    worksheetDoc.CreateXmlDeclaration("1.0",
    "UTF-8", "yes");
    worksheetDoc.InsertBefore(wsxmldecl, wsRoot);


    //Create and append the worksheet node
    //to the document.
    XmlElement workSheet =
    worksheetDoc.CreateElement("worksheet");
    workSheet.SetAttribute("xmlns",
    "http://schemas.openxmlformats.org/" +
    "spreadsheetml/2006/main");
    workSheet.SetAttribute("xmlns:r",
    "http://schemas.openxmlformats.org/" +
    "officeDocument/2006/relationships");
    worksheetDoc.AppendChild(workSheet);

    //Create and add the sheetData node.
    XmlElement sheetData =
    worksheetDoc.CreateElement("sheetData");
    workSheet.AppendChild(sheetData);

    //Create and add the row node.
    XmlElement rNode = worksheetDoc.CreateElement("row");
    rNode.SetAttribute("r", (1).ToString());
    rNode.SetAttribute("spans", "1:1");
    sheetData.AppendChild(rNode);

    //Create and add the column node.
    XmlElement cNode = worksheetDoc.CreateElement("c");
    cNode.SetAttribute("r", "A1");
    cNode.SetAttribute("t", "s");
    rNode.AppendChild(cNode);

    //Add the "Hello World" text to the worksheet.
    XmlElement vNode = worksheetDoc.CreateElement("v");
    vNode.InnerText = "0";
    cNode.AppendChild(vNode);

    return worksheetDoc;

    case "sharedstrings":
    //Create a new XML document for the sharedStrings.
    XmlDocument sharedStringsDoc = new XmlDocument();

    //Get a reference to the root node, and then add
    //the XML declaration.
    XmlElement ssRoot = sharedStringsDoc.DocumentElement;
    XmlDeclaration ssxmldecl =
    sharedStringsDoc.CreateXmlDeclaration("1.0",
    "UTF-8", "yes");
    sharedStringsDoc.InsertBefore(ssxmldecl, ssRoot);

    //Create and append the sst node.
    XmlElement sstNode =
    sharedStringsDoc.CreateElement("sst");
    sstNode.SetAttribute("xmlns",
    "http://schemas.openxmlformats.org/" +
    "spreadsheetml/2006/main");
    sstNode.SetAttribute("count", "1");
    sstNode.SetAttribute("uniqueCount", "1");
    sharedStringsDoc.AppendChild(sstNode);

    //Create and append the si node.
    XmlElement siNode = sharedStringsDoc.CreateElement("si");
    sstNode.AppendChild(siNode);

    //Create and append the t node.
    XmlElement tNode = sharedStringsDoc.CreateElement("t");
    tNode.InnerText = "Hello World";
    siNode.AppendChild(tNode);

    return sharedStringsDoc;

    default:
    return null;
    }
    }

    private Package CreateExcelWorkbookPackage(string fileName)
    {
    //Create a new Excel workbook package on the
    //desktop of the user by using the specified name.
    string desktopDir = System.Environment.GetFolderPath(
    Environment.SpecialFolder.DesktopDirectory);

    Package xlPackage = Package.Open(desktopDir + "\\" + fileName,
    FileMode.Create, FileAccess.ReadWrite);

    return xlPackage;

    }

    private void AddExcelPart(Package fPackage, string part,
    XmlDocument xDoc)
    {
    switch (part)
    {
    case "workbook":
    string nsWorkbook = "application/vnd.openxmlformats-" +
    "officedocument.spreadsheetml.sheet.main+xml";
    string workbookRelationshipType =
    "http://schemas.openxmlformats.org/" + "officeDocument/2006/relationships/" +
    "officeDocument";
    Uri workBookUri = PackUriHelper.CreatePartUri(new
    Uri("xl/workbook.xml",UriKind.Relative));

    //Create the workbook part.
    PackagePart wbPart =
    fPackage.CreatePart(workBookUri, nsWorkbook);

    //Write the workbook XML to the workbook part.
    Stream workbookStream =
    wbPart.GetStream(FileMode.Create,
    FileAccess.Write);
    xDoc.Save(workbookStream);

    //Create the relationship for the workbook part.
    fPackage.CreateRelationship(workBookUri,
    TargetMode.Internal,
    workbookRelationshipType,"rId1");

    break;

    case "worksheet":
    string nsWorksheet = "application/vnd.openxmlformats-" +
    "officedocument.spreadsheetml.worksheet+xml";
    string worksheetRelationshipType =
    "http://schemas.openxmlformats.org/" +
    "officeDocument/2006/relationships/worksheet";
    Uri workSheetUri = PackUriHelper.CreatePartUri(new
    Uri("xl/worksheets/sheet1.xml",UriKind.Relative));

    //Create the workbook part.
    PackagePart wsPart =
    fPackage.CreatePart(workSheetUri, nsWorksheet);

    //Write the workbook XML to the workbook part.
    Stream worksheetStream =
    wsPart.GetStream(FileMode.Create,
    FileAccess.Write);
    xDoc.Save(worksheetStream);

    //Create the relationship for the workbook part.
    Uri wsworkbookPartUri = PackUriHelper.CreatePartUri(new
    Uri("xl/workbook.xml",UriKind.Relative));
    PackagePart wsworkbookPart =
    fPackage.GetPart(wsworkbookPartUri);
    wsworkbookPart.CreateRelationship(workSheetUri,
    TargetMode.Internal,
    worksheetRelationshipType,"rId1");

    break;

    case "sharedstrings":
    string nsSharedStrings =
    "application/vnd.openxmlformats-officedocument" +
    ".spreadsheetml.sharedStrings+xml";
    string sharedStringsRelationshipType =
    "http://schemas.openxmlformats.org" + "/officeDocument/2006/relationships/sharedStrings";
    Uri sharedStringsUri = PackUriHelper.CreatePartUri(new
    Uri("xl/sharedStrings.xml", UriKind.Relative));

    //Create the workbook part.
    PackagePart sharedStringsPart = fPackage.CreatePart(sharedStringsUri,
    nsSharedStrings);

    //Write the workbook XML to the workbook part.
    Stream sharedStringsStream =
    sharedStringsPart.GetStream(FileMode.Create,
    FileAccess.Write);
    xDoc.Save(sharedStringsStream);

    //Create the relationship for the workbook part.
    Uri ssworkbookPartUri = PackUriHelper.CreatePartUri(new
    Uri("xl/workbook.xml", UriKind.Relative));
    PackagePart ssworkbookPart =
    fPackage.GetPart(ssworkbookPartUri);
    ssworkbookPart.CreateRelationship(sharedStringsUri,
    TargetMode.Internal,
    sharedStringsRelationshipType,"rId2");

    break;
    }
    }

  6. Uložte projekt.

Přidejte kód k vytvoření dokumentu aplikace Word

  1. V aplikaci Visual Studio klepněte na tlačítko
    Návrhář v nabídce zobrazení přepnout do návrhového zobrazení formuláře.
  2. Přidání jiného ovládacího prvku tlačítko do formuláře systému Windows. Nastavit
    Vlastnost text tlačítka pro Vytvoření dokumentu aplikace Word.
  3. Poklepejte na tlačítko Generovat
    Obslužná rutina události button2_Click .
  4. Přidejte kód, který
    button2_Click obslužné rutiny události tak, že se podobá následujícímu příkladu kódu.
    private void button2_Click(object sender, EventArgs e)        {
    //Create the XML for the Word document.
    XmlDocument xDoc = null;
    xDoc = CreateDocumentXML("Hello World");

    //Create the Word document package.
    if (xDoc != null)
    {
    bool hResult = CreateWordDocumentPackage("HelloWorld.docx",
    xDoc);

    if (hResult == true)
    {
    MessageBox.Show("Successfully created Word document");
    }
    }
    }


  5. Přidáte následující příklad kódu do třídy Form1 . Tento příklad kódu vytvoří a vloží komponenty XML obsahující dokument aplikace Word.
    private XmlDocument CreateDocumentXML(string docText)        {
    string nsWordML =
    "http://schemas.openxmlformats.org/wordprocessingml" +
    "/2006/main";

    //Create a new XML document.
    XmlDocument xDoc = new XmlDocument();

    //Create and add the document node.
    XmlElement docNode =
    xDoc.CreateElement("w:document", nsWordML);
    xDoc.AppendChild(docNode);

    //Create and add the body node to the
    //document node.
    XmlElement bodyNode =
    xDoc.CreateElement("w:body", nsWordML);
    docNode.AppendChild(bodyNode);

    //Create and add the wp node to the docNode.
    XmlElement wpNode =
    xDoc.CreateElement("w:p", nsWordML);
    bodyNode.AppendChild(wpNode);

    //Create and add the wr node to the wpNode.
    XmlElement wrNode =
    xDoc.CreateElement("w:r", nsWordML);
    wpNode.AppendChild(wrNode);

    //Create and add the wt node to the wrNode.
    XmlElement wtNode =
    (XmlElement)xDoc.CreateNode(XmlNodeType.Element,
    "w", "t", nsWordML);
    wrNode.AppendChild(wtNode);

    //Add the supplied text to the wtNode.
    wtNode.InnerText = docText;

    return xDoc;
    }

    private bool CreateWordDocumentPackage(string fileName,
    XmlDocument xDoc)
    {
    try
    {
    string docContentType = "application/vnd.openxmlformats-" +
    "officedocument.wordprocessingml." +
    "document.main+xml";

    string docRelationshipType =
    "http://schemas.openxmlformats.org" +
    "/officeDocument/2006/relationships/" +
    "officeDocument";

    //Create a new package file on the desktop of the user by using
    //the supplied file name.
    string desktopDir = System.Environment.GetFolderPath(
    Environment.SpecialFolder.DesktopDirectory);

    Package pkg = Package.Open(desktopDir + "\\" + fileName,
    FileMode.Create, FileAccess.ReadWrite);


    //Create a Uri for the document part.
    Uri docPartURI = PackUriHelper.CreatePartUri(
    new Uri("/word/document.xml",
    UriKind.Relative));

    //Create the document part.
    PackagePart pkgPart =
    pkg.CreatePart(docPartURI,docContentType);

    //Add the data from XMLDocument to the document part.
    Stream partStream = pkgPart.GetStream(
    FileMode.Create, FileAccess.Write);

    xDoc.Save(partStream);

    //Create a relationship between the document part
    //and the package.
    PackageRelationship pkgRelationship =
    pkg.CreateRelationship(docPartURI,
    TargetMode.Internal,docRelationshipType, "rId1");


    //Flush the changes, and then close the package.
    pkg.Flush();
    pkg.Close();

    return true;

    }
    catch (Exception ex)
    {
    //Display a message to the user the indicates that an error
    //occurred, and then return a result of false.
    MessageBox.Show("An error occurred creating the document." +
    " " + ex.Message,"Error Creating Document",
    MessageBoxButtons.OK,MessageBoxIcon.Error);
    return false;
    }
    }

  6. V aplikaci Visual Studio 2005 klepněte na tlačítko Spustit ladění v nabídce ladění .
  7. Klepněte na tlačítko vytvořit sešit aplikace Excel. Zobrazí se okno zprávy, která označuje, že sešit byl úspěšně vytvořen, a soubor HelloWorld.xlsx je vytvořen na ploše.
  8. V aplikaci Excel 2007 otevřete sešit. Všimněte si, že otevře sešit v aplikaci Excel 2007 a že listu List1 obsahuje text "Hello World".
  9. Klepněte na tlačítko vytvořit dokument aplikace Word. Zobrazí se okno zprávy, která označuje, že dokument byla úspěšně vytvořena a je vytvořen soubor HelloWorld.docx na ploše.
  10. V aplikaci Word 2007 otevřete dokument. Všimněte si, že se dokument otevře v aplikaci Word a že dokument obsahuje text "Hello World".
Vlastnosti

ID článku: 931866 - Poslední kontrola: 14. 1. 2017 - Revize: 1

Váš názor