Sdílet prostřednictvím


Názorný postup: Změna Data v mezipaměti v sešitu na serveru

Tento návod ukazuje, jak upravit objekt dataset, který je uložen do mezipaměti v aplikaci Microsoft Office Excel sešit bez spuštění aplikace Excel pomocí ServerDocument třídy.

Platí pro: Informace v tomto tématu se vztahují na projekty na úrovni dokumentu v aplikacích Excel 2013 a Excel 2010. Další informace naleznete v tématu Funkce aplikace Office a typ projektu.

Tento návod ilustruje následující úkoly:

  • Definování dataset, který obsahuje data z databáze AdventureWorksLT.

  • Vytvoření instance objektu DataSet v projektu sešitu aplikace Excel a projekt konzolové aplikace.

  • Vytváření ListObject , je vázaný objekt dataset v sešitu a naplnění ListObject s daty při otevření sešitu.

  • Přidání objektu dataset v sešitu do mezipaměti data.

  • Úprava sloupce dat v mezipaměti objektu dataset spuštěním kódu v aplikaci konzoly bez spuštění aplikace Excel.

Přestože tento návod předpokládá, že používáte kód na vašem vývojovém počítači, kód prokázat v tomto návodu lze použít na serveru, který nemá nainstalovanou aplikaci Excel.

[!POZNÁMKA]

Váš počítač může zobrazit jiné názvy nebo umístění pro některé prvky uživatelského rozhraní sady Visual Studio v následujících pokynech.Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením.Další informace naleznete v tématu Nastavení aplikace Visual Studio.

Požadavky

Chcete-li dokončit tento návod, potřebujete následující komponenty:

-

Edice sady Visual Studio 2012, která zahrnuje nástroje Microsoft Office Developer Tools. Další informace naleznete v tématu [Konfigurace počítače vyvinout řešení Office](bb398242\(v=vs.110\).md).

Vytváření projektu knihovny tříd, který definuje třídu Dataset

Použití stejného objektu dataset v projektu sešitu aplikace Excel a konzolové aplikace, je nutné definovat datové sady v samostatném sestavení, který odkazuje obou těchto projektů.V tomto návodu definujte datové sady v projektu knihovny tříd.

Vytvoření projektu knihovny tříd

  1. Spusťte nástroj Visual Studio.

  2. V nabídce File (Soubor) přejděte na příkaz New (Nový) a klepněte na příkaz Project (Projekt).

  3. Rozbalte v podokně šablony Visual C# nebo jazyka Visual Basica potom klepněte na tlačítko Windows.

  4. V seznamu šablon projektů vyberte Knihovny tříd.

  5. V jméno zadejte AdventureWorksDataSet.

  6. Klepněte na tlačítko Procházet, přejděte na %UserProfile%\My dokumenty (pro systém Windows XP a starší) nebo %UserProfile%\Documents (pro systém Windows Vista) složky a klepněte na tlačítko Vybrat složku.

  7. V Nový projekt dialogové okno pole, ujistěte se, že vytvořit adresář pro řešení políčko není zaškrtnuto.

  8. Klikněte na tlačítko OK.

    Visual StudioPřidá AdventureWorksDataSet projektu na Průzkumníku a otevře Class1.cs nebo Class1.vb soubor kódu.

  9. V Průzkumníku, klepněte pravým tlačítkem Class1.cs nebo Class1.vba potom klepněte na tlačítko Odstranit.Není nutné tento soubor v tomto návodu.

Definování objekt Dataset v projektu knihovny tříd

Definujte definovanou datovou sadu, která obsahuje data z databáze AdventureWorksLT pro SQL Server 2005.Dále v tomto návodu bude odkazovat tento objekt dataset z projektu sešitu aplikace Excel a projekt konzolové aplikace.

Objekt dataset je zadaný objekt dataset , která představuje data v tabulce Product v databázi AdventureWorksLT.Další informace o typových datových sad naleznete v tématu Práce se soubory v aplikaci Visual Studio.

Chcete-li definovat typované sady dat v projektu knihovny tříd

  1. V Průzkumníku, klepněte AdventureWorksDataSet projektu.

  2. Pokud Zdroje dat okno není zobrazen, zobrazit, na nabídek, výběr zobrazení, Ostatní okna, Zdroje dat.

  3. Zvolte Přidat nový zdroj dat ke spuštění Průvodce konfigurací zdroje dat.

  4. Klepněte na tlačítko databázea potom klepněte na tlačítko Další.

  5. Pokud máte existující připojení k databázi AdventureWorksLT, zvolte toto připojení a klepněte na Další.

    V opačném případě klepněte na tlačítko Nové připojenía použít Přidat připojení dialogové okno k vytvoření nového připojení.Další informace naleznete v tématu Jak: připojení k datům v databázi.

  6. V Uložit připojovací řetězec do konfiguračního souboru aplikace stránky, klepněte na tlačítko Další.

  7. V Zvolte vaše databázové objekty stránky, rozbalte položku tabulky a vyberte produkt (SalesLT).

  8. Klepněte na tlačítko Dokončit.

    Je do souboru AdventureWorksLTDataSet.xsd AdventureWorksDataSet projektu.Tento soubor definuje následující položky:

    • Zadaný objekt dataset s názvem AdventureWorksLTDataSet.Tento objekt dataset představuje obsah tabulce Product v databázi AdventureWorksLT.

    • A TableAdapter named ProductTableAdapter.To TableAdapter lze použít ke čtení a zápisu dat v AdventureWorksLTDataSet.Další informace naleznete v tématu Přehled TableAdapter.

    Oba tyto objekty bude používat později v tomto návodu.

  9. V Průzkumníku, klepněte pravým tlačítkem AdventureWorksDataSet a klepněte na tlačítko sestavení.

    Ověřte, že projekt sestaví bez chyb.

Vytváření projektu sešitu aplikace Excel

Vytvořte projekt sešitu aplikace Excel pro rozhraní s daty.Dále v tomto návodu vytvoříte ListObject zobrazující data a přidáte instanci objektu dataset do mezipaměti data v sešitu.

Chcete-li vytvořit projekt sešitu aplikace Excel

  1. V Průzkumníku, klepněte pravým tlačítkem myši AdventureWorksDataSet řešení, přejděte na příkaz Přidata potom klepněte na tlačítko Nový projekt.

  2. Rozbalte v podokně šablony Visual C# nebo jazyka Visual Basica potom rozbalte uzel Office.

  3. V rámci rozšířeného Office uzel, vyberte 2010 uzlu.

  4. V seznamu šablon projektu vyberte projekt sešitu aplikace Excel.

  5. V jméno zadejte AdventureWorksReport.Neupravujte umístění.

  6. Klikněte na tlačítko OK.

    Visual Studio Tools for Office Project Wizard otevře.

  7. Zajistit, aby vytvořit nový dokument je vybrán a klepněte na tlačítko OK.

    Visual StudioOtevře AdventureWorksReport sešitu v návrháři a přidá AdventureWorksReport projektu na Průzkumníku.

Přidání objektu Dataset ke zdrojům dat v projektu sešitu aplikace Excel

Než budete moci zobrazit objekt dataset v sešitu aplikace Excel, je nutné přidat objekt dataset ke zdrojům dat v projektu sešitu aplikace Excel.

Chcete-li přidat objekt dataset ke zdrojům dat v projektu sešitu aplikace Excel

  1. V Průzkumníku, poklepejte na Sheet1.cs nebo Sheet1.vb pod AdventureWorksReport projektu.

    Sešit se otevře v návrháři.

  2. Na dat nabídky, klepněte na tlačítko Přidat nový zdroj dat.

    Otevře se Průvodce konfigurací zdroje dat.

  3. Klepněte na tlačítko objekta potom klepněte na tlačítko Další.

  4. V Vyberte objekt chcete vytvořit vazbu na stránky, klepněte na tlačítko Přidat odkaz na.

  5. Na projekty karta, klepněte na tlačítko AdventureWorksDataSet a potom klepněte na tlačítko OK.

  6. Ve skupinovém rámečku AdventureWorksDataSet oboru názvů AdventureWorksDataSet sestavení, klepněte na tlačítko AdventureWorksLTDataSet a potom klepněte na tlačítko Dokončit.

    Zdroje dat se otevře okno, a AdventureWorksLTDataSet je přidán do seznamu datových zdrojů.

Vytvoření objektu ListObject, který je vázán na instanci objektu Dataset

Chcete-li zobrazit objekt dataset v sešitu, vytvořte ListObject který je vázán na instanci objektu dataset.Další informace o vázání ovládacích prvků na data naleznete v tématu Vazba dat pro ovládací prvky v Office Solutions.

K vytvoření objektu ListObject, který je vázán k instanci objektu dataset

  1. V Zdroje dat okno, rozbalte AdventureWorksLTDataSet uzlu AdventureWorksDataSet.

  2. Vyberte výrobku uzel, klepněte na šipku rozevíracího seznamu, který se zobrazí a zvolte objektu ListObject v rozevíracím seznamu.

    Je-li na šipku rozevíracího seznamu nezobrazí, potvrďte, že sešit je otevřen v návrháři.

  3. Přetáhněte výrobku tabulku do buňky A1.

    A ListObject ovládací prvek s názvem productListObject je vytvořen na listu s počátkem v buňce A1.Současně, objekt dataset s názvem adventureWorksLTDataSet a BindingSource s názvem productBindingSource jsou přidány do projektu.ListObject Je vázán BindingSource, který je zase vázán na objekt dataset.

Přidání datové sady do mezipaměti Data

Chcete-li kód mimo projekt sešitu aplikace Excel pro přístup k objektu dataset v sešitu, je nutné přidat datové sady do mezipaměti data.Další informace o mezipaměti dat naleznete v tématu Data v mezipaměti v úpravy na úrovni dokumentu a Ukládání dat.

Chcete-li přidat objekt dataset do mezipaměti data

  1. V návrháři, klepněte na tlačítko adventureWorksLTDataSet.

  2. V Vlastnosti okno, nastavit Modifikátory vlastnost veřejné.

  3. Nastavit CacheInDocument vlastnost True.

Inicializace objektu Dataset v sešitu

Dříve než můžete načíst data z datové sady v mezipaměti pomocí konzolové aplikace, je nutné zaplnit v mezipaměti objektu dataset s daty.

Inicializace objektu dataset v sešitu

  1. V Průzkumníku, klepněte pravým tlačítkem myši Sheet1.cs nebo Sheet1.vb soubor a klepněte na tlačítko Zobrazit kód.

  2. Nahradit Sheet1_Startup obslužnou rutinu události s tímto kódem.Tento kód používá instanci ProductTableAdapter třídou, která je definována v AdventureWorksDataSet projektu k vyplnění datové sady v mezipaměti dat, pokud je aktuálně prázdná.

    Private ProductTableAdapter As New  _
        AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter()
    
    Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
        If Me.NeedsFill("AdventureWorksLTDataSet") Then
            Me.ProductTableAdapter.Fill(Me.AdventureWorksLTDataSet.Product)
        End If
    End Sub
    
    private AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter =
        new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
    
    private void Sheet1_Startup(object sender, System.EventArgs e)
    {
        if (this.NeedsFill("adventureWorksLTDataSet"))
        {
            this.productTableAdapter.Fill(this.adventureWorksLTDataSet.Product);
        }
    }
    

Checkpoint

Sestavte a spusťte projekt sešitu aplikace Excel k zajištění toho, že sestavuje a spouští bez chyb.Tato operace také vyplní datové sady v mezipaměti a ukládá data v sešitu.

Chcete-li sestavit a spustit projekt

  1. V Průzkumníku, klepněte pravým tlačítkem myši AdventureWorksReport projektu, zvolte laděnía potom klepněte na tlačítko Spustit novou instanci.

    Sestavení projektu a otevře sešit v aplikaci Excel.Ověřte následující:

    • ListObject Vyplní daty.

    • Hodnota v ListPrice sloupec pro první řádek ListObject je 1431.5.Dále v tomto návodu budete používat aplikaci konzoly upravit hodnoty v ListPrice sloupce.

  2. Uložte sešit.Neměňte název souboru nebo umístění sešitu.

  3. Ukončete aplikaci Excel.

Vytvoření projektu aplikace konzoly

Vytvořte projekt konzolové aplikace použít k úpravě dat v datové sady v mezipaměti v sešitu.

Vytvořte projekt konzolové aplikace

  1. V Průzkumníku, klepněte pravým tlačítkem myši AdventureWorksDataSet řešení, přejděte na příkaz Přidata potom klepněte na tlačítko Nový projekt.

  2. V Typy projektů podokně rozbalte Visual C# nebo jazyka Visual Basica potom klepněte na tlačítko Windows.

  3. V šablony podokně, vyberte Aplikace konzoly.

  4. V jméno zadejte DataWriter.Neupravujte umístění.

  5. Klikněte na tlačítko OK.

    Visual StudioPřidá DataWriter projektu na Průzkumníku a otevře Program.cs nebo Module1.vb soubor kódu.

Změna dat v datové sady v mezipaměti pomocí konzolové aplikace

Použití ServerDocument tříd v aplikaci konzoly k načtení dat do místního AdventureWorksLTDataSet objekt upravit tato data a potom uložit zpět do mezipaměti objektu dataset.

Chcete-li změnit data v mezipaměti objektu dataset.

  1. V Průzkumníku, klepněte pravým tlačítkem myši DataWriter projektu a klepněte na tlačítko Přidat odkaz na.

  2. V .NET karta, vyberte Microsoft.VisualStudio.Tools.Applications.

  3. Klikněte na tlačítko OK.

  4. V Průzkumníku, klepněte pravým tlačítkem myši DataWriter projektu a klepněte na tlačítko Přidat odkaz na.

  5. Na projekty kartu, vyberte AdventureWorksDataSeta klepněte na tlačítko OK.

  6. Otevřete soubor Program.cs nebo Module1.vb v editoru kódu.

  7. Přidejte následující using (pro jazyk C#) nebo Imports (pro jazyk Visual Basic) příkaz na začátek souboru kódu.

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Do metody Main přidejte následující kód:Tento kód deklaruje následující objekty:

    • Instance AdventureWorksLTDataSet typu, který je definován v AdventureWorksDataSet projektu.

    • Cesta k sešitu AdventureWorksReport ve složce sestavení AdventureWorksReport projektu.

    • A ServerDocument objekt, který chcete použít pro přístup k mezipaměti data v sešitu.

      [!POZNÁMKA]

      Následující kód předpokládá, že používáte sešit, který má příponu XLSX.Je-li sešit ve vašem projektu má jinou příponu souboru, změňte cestu podle potřeby.

    Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet()
    Dim workbookPath As String = System.Environment.GetFolderPath( _
        Environment.SpecialFolder.MyDocuments) & _
        "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"
    Dim serverDocument1 As ServerDocument = Nothing
    
    AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet =
        new AdventureWorksDataSet.AdventureWorksLTDataSet();
    string workbookPath = System.Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) +
        @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
    ServerDocument serverDocument1 = null;
    
  9. Přidejte následující kód, který Main metoda po kódu, který jste přidali v předchozím kroku.Tento kód provede následující úlohy:

    • Používá CachedData vlastnost ServerDocument třídu pro přístup k datové sady v mezipaměti v sešitu.

    • Čte data z datové sady v mezipaměti na místním objektu dataset.

    • Změní se ListPrice hodnota každého produktu v tabulce Product objektu DataSet.

    • Uloží změny do mezipaměti objektu dataset v sešitu.

    Try
        serverDocument1 = New ServerDocument(workbookPath)
        Dim dataHostItem1 As CachedDataHostItem = _
            serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1")
        Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet")
    
        If dataItem1 IsNot Nothing Then
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Read the cached data from the worksheet dataset into the local dataset.
            Dim schemaReader As New System.IO.StringReader(dataItem1.Schema)
            Dim xmlReader As New System.IO.StringReader(dataItem1.Xml)
            productDataSet.ReadXmlSchema(schemaReader)
            productDataSet.ReadXml(xmlReader)
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Modify the prices of each product in the local dataset.
            Dim row As AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow
            For Each row In productDataSet.Product.Rows
                If row.ProductCategoryID < 20 Then
                    row.ListPrice = row.ListPrice + row.ListPrice * 0.1
                Else
                    row.ListPrice = row.ListPrice - row.ListPrice * 0.1
                End If
            Next row
    
            ' Write the modified local dataset to the worksheet dataset using the DiffGram format.
            Dim stringIn As New System.Text.StringBuilder()
            Dim stringOut As New System.IO.StringWriter(stringIn)
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram)
            dataItem1.Xml = stringIn.ToString()
    
            serverDocument1.Save()
            Console.WriteLine("The product prices have been modified.")
        Else
            Console.WriteLine("The data object is not found in the data cache.")
        End If
    Catch ex As System.IO.FileNotFoundException
        Console.WriteLine("The specified workbook does not exist.")
    Catch ex As System.Xml.XmlException
        Console.WriteLine("The data object has invalid XML information.")
    Finally
        If Not (serverDocument1 Is Nothing) Then
            serverDocument1.Close()
        End If
        Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.")
        Console.ReadLine()
    End Try
    
    try
    {
        serverDocument1 = new ServerDocument(workbookPath);
        CachedDataHostItem dataHostItem1 =
            serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"];
        CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"];
    
        if (dataItem1 != null)
        {
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Read the cached data from the worksheet dataset into the local dataset.
            System.IO.StringReader schemaReader = new System.IO.StringReader(dataItem1.Schema);
            System.IO.StringReader xmlReader = new System.IO.StringReader(dataItem1.Xml);
            productDataSet.ReadXmlSchema(schemaReader);
            productDataSet.ReadXml(xmlReader);
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Modify the prices of each product in the local dataset.
            foreach (AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow row in 
                     productDataSet.Product.Rows)
            {
                if (row.ProductCategoryID < 20)
                {
                    row.ListPrice = row.ListPrice + (row.ListPrice * (Decimal).10);
                }
                else
                {
                    row.ListPrice = row.ListPrice - (row.ListPrice * (Decimal).10);
                }
            }
    
            // Write the modified local dataset to the worksheet dataset using the DiffGram format.
            System.Text.StringBuilder stringIn = new System.Text.StringBuilder();
            System.IO.StringWriter stringOut = new System.IO.StringWriter(stringIn);
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram);
            dataItem1.Xml = stringIn.ToString();
    
            serverDocument1.Save();
            Console.WriteLine("The product prices have been modified.");
        }
        else
        {
            Console.WriteLine("The data object is not found in the data cache.");
        }
    }
    catch (System.IO.FileNotFoundException)
    {
        Console.WriteLine("The specified workbook does not exist.");
    }
    catch (System.Xml.XmlException)
    {
        Console.WriteLine("The data object has invalid XML information.");
    }
    finally
    {
        if (serverDocument1 != null)
        {
            serverDocument1.Close();
        }
    
        Console.WriteLine("\n\nPress Enter to close the application.");
        Console.ReadLine();
    }
    
  10. V Průzkumníku, klepněte pravým tlačítkem myši DataWriter projektu, přejděte na příkaz laděnía potom klepněte na tlačítko Spustit novou instanci.

    Konzolová aplikace zobrazuje zprávy, zatímco načte z mezipaměti objektu dataset do místní dataset, upravuje ceny produktu v místním objektu dataset a uloží nové hodnoty do mezipaměti objektu dataset.Stisknutím klávesy ENTER ukončete aplikaci.

Testování sešitu

Při otevření sešitu, ListObject nyní zobrazí změny provedené ListPrice sloupec dat v mezipaměti objektu dataset.

Chcete-li otestovat sešitu

  1. Pokud je stále otevřen, zavřete sešit AdventureWorksReport v návrháři Visual Studio.

  2. Otevřete sešit AdventureWorksReport, který je ve složce sestavení AdventureWorksReport projektu.Ve výchozím nastavení je složka sestavení v následujících umístěních:

    • %USERPROFILE%\My Documents\AdventureWorksReport\bin\Debug (pro systém Windows XP a starší)

    • %USERPROFILE%\Documents\AdventureWorksReport\bin\Debug (pro systém Windows Vista)

  3. Ověřte, zda hodnota v ListPrice sloupec pro první řádek ListObject je nyní 1574.65.

  4. Zavřete sešit.

Viz také

Úkoly

Názorný postup: Vkládání dat do sešitu na serveru

Koncepty

Připojení k datům v model Windows Forms aplikacích