Så här skapar du en graf från råa datafiler i någon kontorsprodukt

Så här skapar du en graf från råa datafiler i någon kontorsprodukt / Windows

Skulle det inte vara kul att ha möjlighet att bara öppna ett Excel-kalkylblad eller ett Word-dokument och utan att behöva göra någonting alls, läses data direkt ut från en text- eller CSV-datafil och laddas direkt i ett diagram som är inbäddat på ditt kalkylblad eller Word-dokument? Det här är en form av automatisering med Office-produkter, för om det är möjligt att automatisera kartläggningen av data i Office, tänk bara på möjligheterna. Du kan automatiskt ladda data till ett diagram för en rapport som du sätter ihop för din chef - ingen datainmatning krävs. Eller du kan ladda data till ett diagram direkt i ett e-postmeddelande i Outlook.

Tekniken för att åstadkomma detta innebär att du installerar Office Web Components-tillägget. Dessutom behöver du bara konfigurera några saker inuti Office-programmet som du vill använda för att importera data, och du är redo att börja automatisera ditt rapporteringsarbete. Jag har täckt några av de element som vi ska använda i den här artikeln i tidigare VBA-artiklar Hur kan du göra din egen enkla app med VBA Hur kan du göra din egen enkla app med VBA För de av er som verkligen skulle älska för att kunna skriva din egen ansökan, men har aldrig skrivit en enda kodlinje innan, kommer jag att gå igenom dig genom att göra din mycket ... Läs mer här på MakeUseOf. Några av dessa inkluderade att skicka data mellan applikationerna med urklippet. Passa någon information mellan VBA-program som använder utklippstavlan. Passa eventuell information mellan VBA-program med klippbordet. En av de mest frustrerande delarna av att arbeta med VBA inom specifika applikationer är att det inte alltid är lätt att få två applikationer till “prata” till varandra. Du kan försöka med mycket snabba transaktioner ... Läs mer, exportera Outlook-uppgifter till Excel Så här exporterar du dina Outlook-uppgifter till Excel med VBA Hur exporterar du dina Outlook-uppgifter till Excel med VBA Oavsett om du är en fan av Microsoft, är det en bra sak att kan sägas om MS Office-produkter, åtminstone är det hur enkelt det är att integrera var och en av dem med varandra ... Läs mer och skicka e-post från en Excel Så skickar du e-post från ett Excel-kalkylblad med VBA-skript Hur skickar du e-post från ett Excel-kalkylblad med VBA-skript Vår kodmall hjälper dig att ställa in automatiserade e-postmeddelanden från Excel med hjälp av samarbetsdataobjekt (CDO) och VBA-skript. Läs mer skript.

Vad jag ska visa dig är hur man kombinerar Office Web Components med textfilskription för att skapa en sömlös, automatiserad dataström från en platt textfil på datorn till din Office-produkt (i vårt fall Excel). Du kan använda samma teknik - med några små ändringar - i Word, Outlook eller PowerPoint. Varje Office-produkt (eller någon annan produkt för den delen) som har ett VBA-back-end för utvecklare, låter dig använda denna teknik.

Importera och skapa en graf från datafiler

Innan du kan skapa en graf från datafiler måste du aktivera några saker först. I det här exemplet kommer jag att visa dig hur du aktiverar dessa funktioner i Excel, men processen är nästan identisk i alla andra Office-produkter.

Först innan du kan göra någon VBA-utveckling, måste du aktivera utvecklarfliken i verktygsfältet (om du inte redan har det). För att göra detta, gå bara till Alternativ-menyn, klicka på “Skräddarsy bandet” och aktivera “Utvecklare” flik.

Tillbaka i Excle ser du nu “Utvecklare” dyker upp i menyerna. Klicka på den och klicka på “Designläge”. Klicka sedan på “Visa kod” för att se VBA-redigeraren.

Inuti redaktören är där du måste aktivera referenser som du behöver för koden jag ska ge dig till jobbet. Se till att du har installerat tillägget Office Web Components innan du gör det, annars kommer Microsoft Chart-objektet inte att vara tillgängligt.


Klicka på Verktyg och sedan Referenser, och du får se en lista över alla referenser som finns tillgängliga på ditt system. Om du inte vet vad det här är - referenser är i princip bibliotek med kod och objekt som du kan dra in i ditt eget projekt. Dessa tillåter dig att göra några riktigt coola saker, beroende på vilken referens du aktiverar. Om du just har installerat Office Web Components i ditt system måste du lägga till det som ett nytt bibliotek, så klicka på Browse-knappen för att hitta rätt .dll-fil.

Om du har installerat Office Web Components kallas DLL-filen OWC11.dll, och den lagras i c: \ programfiler \ vanliga filer \ microsoft shared \ web components \ 11 \

Klicka på kryssrutan för “Microsoft Office Web Components 11.0” referens, och glöm inte att välja “Microsoft Scripting Runtime” som också ger dig tillgång till läsning eller skrivning från datafiler.

Nu när du har lagt till referensen är det dags att lägga till det faktiska diagrammet på ditt ark. I Excel kan du lägga till kontroller genom att klicka på “Föra in” på utvecklarmenyn och klicka på ikonen för lilla verktyg i hörnet under “ActiveX-kontroller”.

Bläddra till “Microsoft Office Chart 11.0” och klicka på OK.

Vi hamnar äntligen till affärer. Så här ser MS Web Component-diagrammet ut som inbäddat i ett kalkylblad. Det kommer att se samma inbäddad i ett Word-dokument eller något annat.


Så, när det gäller Excel, vill jag att diagrammet omedelbart laddar data från datafilen när man öppnar arbetsboken. För att göra detta går du in i kodredigeraren genom att klicka på “Visa kod” på utvecklarmenyn och dubbelklicka på arbetsboken för att se arbetsbokskoden. Ändra rätt dropdown till “Öppna”. Detta är det skript som kommer att köras när arbetsbokfilen öppnas först.


För att ladda diagrammet med data från kod behöver diagrammet själv ett namn. Gå tillbaka till kalkylbladet, högerklicka på diagrammet och välj Egenskaper. Du kommer att se “namn” fält med något liknande “ChartSpace1”. Du kan ändra detta till någonting. Jag har kallat min “MyChart”.

Också bara så du vet vad datafilen är som - min är en textfil fylld med datavärden i kommaseparerat format. Den här filen kan vara någonting alls - laboratoriedata som exporteras från sensorer, finansiell information skrivs in i filen manuellt av praktikanter eller något annat alls. Du läser in filen med din kod, så det spelar ingen roll vad dataen ser ut så länge du vet vad varje rad kommer att se ut när ditt program läser det i.

Så nu för den roliga delen. Jag ska visa koden i små avsnitt så det är inte överväldigande och förklara vad koden gör. Kodans övre del kommer först att läsas i alla värden från textfilen och lagras i två arrayx, en för x-variabler (xVar) och en för y-variabler (yVar).

Dim Fso Som Ny FileSystemObject Dim Fnum Dim MyFile Som String Dim StrDataLine Som String Dim xVar () Som Variant Dim yVar () Som Variant Dim IntNumOfLines Som Integer MyFile = "c: \ Files \ MyData.txt" fnum = FreeFile () Öppna MyFile För Input som # 1 intNumOfLines = 0 Gör inte EOF (1) intNumOfLines = intNumOfLines + 1 Input # 1, strDataLine Input # 1, strDataLine Loop Stäng # 1 ReDim xVar (intNumOfLines) ReDim yVar (intNumOfLines) Öppna MyFile för Input som # 1 intNumOfLines = 0 Gör inte när EOF (1) Input # 1, xVar (intNumOfLines) Input # 1, yVar (intNumOfLines) intNumOfLines = intNumOfLines + 1 Loop Close # 1

Koden går i grunden genom datafilen två gånger - första gången för att dimensionera arrayerna så att de är den exakta längden som behövs för att lagra data, och sedan en andra gång för att läsa data i de här arraysna. Om du inte vet vad en array är - det är en variabel eller ett lagringsområde som innehåller en lång lista över värden som du kan komma åt genom att använda den ordning som värdet lagrades i array. Den ena laddade tredje skulle vara (3), till exempel.

Nu när du har två av dessa arrays laddade med alla värden från din datafil är du redo att ladda dessa värden i det diagram som du redan har inbäddat. Här är koden som gör det.

Med Sheet1.MyChart .Clear .Refresh Set oChart = .Charts.Add oChart.HasTitle = Sann oChart.Title.Caption = "Mina datavärden" 'oChart.Interior.Color = "blue" oChart.PlotArea.Interior.Color = " vit "Ange oSeries = oChart.SeriesCollection.Add With oSeries .Caption =" Mina datavärden ".SetData chDimCategories, chDataLiteral, xVar .SetData chDimValues, chDataLiteral, yVar .Line.Color =" blue ".Line.DashStyle = chLineDash .Line .Weight = 2 .Type = chChartTypeLine Slut med oChart.HasLegend = Sann oChart.Legend.Position = chLegendPositionBottom End With

Det är “Sheet1.MyChart” som kopplar koden till det faktiska diagrammet du har inbäddat. Det bygger på vad du namngav det. Det här är fallet när du lägger in det i Word, Powerpoint eller någon annan Office-produkt. Du kommer inte att hänvisa den till att använda “Blad1”, men i stället vad som helst element håller diagrammet i det fallet, till exempel “dokument1” i Word till exempel.

Koden ovan ställer sedan upp märkning och färgning av grafen, och laddar sedan värdena med hjälp av “.setData” metod för både x- och y-värdena för den 2-dimensionella datasatsen. När den ovan angivna koden har körts visas följande graf.

Denna data är rakt ur textfilen. Den enda nackdelen här är att datafilerna bara behöver vara tvådimensionella om du vill använda koden ovan. Du kan lägga till fler värden i datasatsen, men du måste ändra koden ovan för att läsa i det tredje värdet varje gång genom slingan och duplicera sedan “SeriesCollection.Add” avsnitt för att skapa en annan serie och sedan lägga till den i diagrammet på samma sätt.

Det kan tyckas komplicerat att bara läsa koden ovan, men när du har gjort en av dessa är det en bit tårta för att ändra det för vad du än behöver. Du kan använda samma diagram och liknande kod för att skapa ett stapeldiagram, ett scatterdiagram eller någon annan diagramtyp du vill använda samma objekt. Det är mångsidigt och flexibelt - och det är ett kraftfullt verktyg i din arsenal om du har en medarbetare av automation för ökad produktivitet.

Spela runt med koden ovan och se om du kan automatiskt ladda data till dina applikationer. Vilka kreativa användningsområden kan du tänka dig för denna typ av automatisering? Dela dina tankar och feedback i kommentarfältet nedan!

Utforska mer om: Microsoft Excel, Microsoft PowerPoint, Microsoft Word.