<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>artiso Blog - Excel</title>
    <link>http://www.artiso.com/ProBlog/</link>
    <description>Neues rund um's Thema .Net</description>
    <language>de-de</language>
    <copyright>Thomas</copyright>
    <lastBuildDate>Sun, 11 May 2008 19:54:13 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>tschissler@artiso.com</managingEditor>
    <webMaster>tschissler@artiso.com</webMaster>
    <item>
      <trackback:ping>http://www.artiso.com/ProBlog/Trackback.aspx?guid=05873727-e0af-4e9e-9702-8f12d3300e59</trackback:ping>
      <pingback:server>http://www.artiso.com/ProBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.artiso.com/ProBlog/PermaLink,guid,05873727-e0af-4e9e-9702-8f12d3300e59.aspx</pingback:target>
      <dc:creator>Thomas Schissler</dc:creator>
      <wfw:comment>http://www.artiso.com/ProBlog/CommentView,guid,05873727-e0af-4e9e-9702-8f12d3300e59.aspx</wfw:comment>
      <wfw:commentRss>http://www.artiso.com/ProBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=05873727-e0af-4e9e-9702-8f12d3300e59</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ich wollte aus Excel auf einen Webservice zugreifen. Also kurz gegoogelt (oder gelived
;-)), eigentlich gar nicht so schwer...
</p>
        <p>
Aber wie so oft liegt der Teufel im Detail und es waren doch ein paar Kleinigkeiten
zu beachten, deshalb hier nochmals der komplette Lösungsweg:
</p>
        <p>
Zunächst habe ich einen WebService erstellt, zum Testen was ganz triviales, eigentlich
das Webservice Template nur noch um den Parameter Name erweitert:
</p>
        <div>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: #0000ff">using</span> System; <span style="color: #0000ff">using</span> System.Web; <span style="color: #0000ff">using</span> System.Web.Services; <span style="color: #0000ff">using</span> System.Web.Services.Protocols;
[WebService(Namespace = <span style="color: #006080">"http://tempuri.org/"</span>)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] <span style="color: #0000ff">public</span><span style="color: #0000ff">class</span> Service
: System.Web.Services.WebService { <span style="color: #0000ff">public</span> Service
() { } [WebMethod] <span style="color: #0000ff">public</span><span style="color: #0000ff">string</span> HelloWorld(<span style="color: #0000ff">string</span> Name)
{ <span style="color: #0000ff">return</span><span style="color: #006080">"Hello World
"</span> + Name; } }</pre>
        </div>
        <p>
 
</p>
        <p>
Die URL um auf den Webservice mit ausgefülltem Parameter zuzugreifen lautet <a href="http://localhost:49408/WebSite2/Service.asmx/HelloWorld?Name=Test">http://localhost:49408/WebSite2/Service.asmx/HelloWorld?Name=Test</a>,
jedoch funktioniert das standardmäßig noch nicht. Wir müssen erst noch in der web.config
folgenden Eintrag hinzufügen:
</p>
        <div>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: #0000ff">&lt;</span>
            <span style="color: #800000">webServices</span>
            <span style="color: #0000ff">&gt;</span>
            <span style="color: #0000ff">&lt;</span>
            <span style="color: #800000">protocols</span>
            <span style="color: #0000ff">&gt;</span>
            <span style="color: #0000ff">&lt;</span>
            <span style="color: #800000">add</span>
            <span style="color: #ff0000">name</span>
            <span style="color: #0000ff">="HttpGet"</span>
            <span style="color: #0000ff">/&gt;</span>
            <span style="color: #0000ff">&lt;</span>
            <span style="color: #800000">add</span>
            <span style="color: #ff0000">name</span>
            <span style="color: #0000ff">="HttpPost"</span>
            <span style="color: #0000ff">/&gt;</span>
            <span style="color: #0000ff">&lt;/</span>
            <span style="color: #800000">protocols</span>
            <span style="color: #0000ff">&gt;</span>
            <span style="color: #0000ff">&lt;/</span>
            <span style="color: #800000">webServices</span>
            <span style="color: #0000ff">&gt;</span>
          </pre>
        </div>
        <p>
Nun bekommen wir mit diesem Aufruf den XML-Response des Webservices direkt zurückgegeben.
Nun wollen wir den Webservice aus VBA aufrufen. 
</p>
        <div>
          <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <span style="color: #0000ff">Sub</span> CallWebService() <span style="color: #0000ff">Dim</span> MSXML <span style="color: #0000ff">As</span><span style="color: #0000ff">New</span> MSXML2.DOMDocument <span style="color: #0000ff">Dim</span> strAnfrage <span style="color: #0000ff">As</span><span style="color: #0000ff">String</span> strAnfrage
= <span style="color: #006080">"http://localhost:49408/WebSite2/Service.asmx/HelloWorld?Name=Test"</span><span style="color: #0000ff">With</span> MSXML
.async = <span style="color: #0000ff">False</span> .preserveWhiteSpace = <span style="color: #0000ff">False</span> .validateOnParse
= <span style="color: #0000ff">True</span> .resolveExternals = <span style="color: #0000ff">False</span><span style="color: #0000ff">End</span><span style="color: #0000ff">With</span><span style="color: #0000ff">If</span> MSXML.Load(strAnfrage)
= <span style="color: #0000ff">True</span><span style="color: #0000ff">Then</span> Response
= MSXML.DocumentElement.Text <span style="color: #0000ff">Else</span> Response = <span style="color: #006080">"Fehler"</span><span style="color: #0000ff">End</span><span style="color: #0000ff">If</span><span style="color: #0000ff">End</span> Sub</pre>
        </div>
        <div> 
</div>
        <div>Damit das funktioniert müssen wir noch die Bibliothek "Microsoft XML, vx.0" einfügen.
Wir werten im Moment das XML-Dokument sehr einfach aus, da wir davon ausgehen, dass
der Rückgabewert einfach als Textim XML-Dokument zurückgegeben wird. Damit können
wir einfach mit MSXML.DocumentElement.Text den gewünschten Wert auslesen. Natürlich
können auf diese Weise auch komplexer Rückgabewerte ausgewertet werden, aber das wollen
wir hier nicht näher beleuchten.
</div>
        <img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=05873727-e0af-4e9e-9702-8f12d3300e59" />
      </body>
      <title>Per VBA auf Webservices zugreifen</title>
      <guid isPermaLink="false">http://www.artiso.com/ProBlog/PermaLink,guid,05873727-e0af-4e9e-9702-8f12d3300e59.aspx</guid>
      <link>http://www.artiso.com/ProBlog/PermaLink,guid,05873727-e0af-4e9e-9702-8f12d3300e59.aspx</link>
      <pubDate>Sun, 11 May 2008 19:54:13 GMT</pubDate>
      <description>&lt;p&gt;
Ich wollte aus Excel auf einen Webservice zugreifen. Also kurz gegoogelt (oder gelived
;-)), eigentlich gar nicht so schwer...
&lt;/p&gt;
&lt;p&gt;
Aber wie so oft liegt der Teufel im Detail und es waren doch ein paar Kleinigkeiten
zu beachten, deshalb hier nochmals der komplette Lösungsweg:
&lt;/p&gt;
&lt;p&gt;
Zunächst habe ich einen WebService erstellt, zum Testen was ganz triviales, eigentlich
das Webservice Template nur noch um den Parameter Name erweitert:
&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web.Services; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web.Services.Protocols;
[WebService(Namespace = &lt;span style="color: #006080"&gt;"http://tempuri.org/"&lt;/span&gt;)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Service
: System.Web.Services.WebService { &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Service
() { } [WebMethod] &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; HelloWorld(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Name)
{ &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #006080"&gt;"Hello World
"&lt;/span&gt; + Name; } }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Die URL um auf den Webservice mit ausgefülltem Parameter zuzugreifen lautet &lt;a href="http://localhost:49408/WebSite2/Service.asmx/HelloWorld?Name=Test"&gt;http://localhost:49408/WebSite2/Service.asmx/HelloWorld?Name=Test&lt;/a&gt;,
jedoch funktioniert das standardmäßig noch nicht. Wir müssen erst noch in der web.config
folgenden Eintrag hinzufügen:
&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;webServices&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;protocols&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="HttpGet"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="HttpPost"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;protocols&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;webServices&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Nun bekommen wir mit diesem Aufruf den XML-Response des Webservices direkt zurückgegeben.
Nun wollen wir den Webservice aus VBA aufrufen. 
&lt;/p&gt;
&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; CallWebService() &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; MSXML &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; MSXML2.DOMDocument &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; strAnfrage &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; strAnfrage
= &lt;span style="color: #006080"&gt;"http://localhost:49408/WebSite2/Service.asmx/HelloWorld?Name=Test"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;With&lt;/span&gt; MSXML
.async = &lt;span style="color: #0000ff"&gt;False&lt;/span&gt; .preserveWhiteSpace = &lt;span style="color: #0000ff"&gt;False&lt;/span&gt; .validateOnParse
= &lt;span style="color: #0000ff"&gt;True&lt;/span&gt; .resolveExternals = &lt;span style="color: #0000ff"&gt;False&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;With&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; MSXML.Load(strAnfrage)
= &lt;span style="color: #0000ff"&gt;True&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt; Response
= MSXML.DocumentElement.Text &lt;span style="color: #0000ff"&gt;Else&lt;/span&gt; Response = &lt;span style="color: #006080"&gt;"Fehler"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;Damit das funktioniert müssen wir noch die Bibliothek "Microsoft XML, vx.0" einfügen.
Wir werten im Moment das XML-Dokument sehr einfach aus, da wir davon ausgehen, dass
der Rückgabewert einfach als Textim XML-Dokument zurückgegeben wird. Damit können
wir einfach mit MSXML.DocumentElement.Text den gewünschten Wert auslesen. Natürlich
können auf diese Weise auch komplexer Rückgabewerte ausgewertet werden, aber das wollen
wir hier nicht näher beleuchten.
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=05873727-e0af-4e9e-9702-8f12d3300e59" /&gt;</description>
      <comments>http://www.artiso.com/ProBlog/CommentView,guid,05873727-e0af-4e9e-9702-8f12d3300e59.aspx</comments>
      <category>Excel;Tipps und Tricks</category>
    </item>
    <item>
      <trackback:ping>http://www.artiso.com/ProBlog/Trackback.aspx?guid=ac224d14-4a24-4858-bf8c-c0ecd1ff7052</trackback:ping>
      <pingback:server>http://www.artiso.com/ProBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.artiso.com/ProBlog/PermaLink,guid,ac224d14-4a24-4858-bf8c-c0ecd1ff7052.aspx</pingback:target>
      <dc:creator>Thomas Schissler</dc:creator>
      <wfw:comment>http://www.artiso.com/ProBlog/CommentView,guid,ac224d14-4a24-4858-bf8c-c0ecd1ff7052.aspx</wfw:comment>
      <wfw:commentRss>http://www.artiso.com/ProBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=ac224d14-4a24-4858-bf8c-c0ecd1ff7052</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In Excel kann man ein Textfeld anlegen und diesem einen variablen Inhalt geben. Hierzu
markiert man das Textfeld und gibt in der Formelzeile z.B. einen Verweis auf eine
Zelle ein (=A1). In A1 kann nun eine beliebige Formel stehen, z.B. ="Summe: " &amp;
SUMME(A2:A20). Möchte man in den text einen Zeilenumbruch einfügen, dann kann man
die Funktion ZEICHEN(10) verwenden, also z.B. = "Summe 2006: " &amp; SUMME(A2:A20)
&amp; ZEICHEN(10) &amp; "Summe 2007: " &amp; SUMME(B2:B20)
</p>
        <img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=ac224d14-4a24-4858-bf8c-c0ecd1ff7052" />
      </body>
      <title>Excel-Textfeld mit variablem Inhalt</title>
      <guid isPermaLink="false">http://www.artiso.com/ProBlog/PermaLink,guid,ac224d14-4a24-4858-bf8c-c0ecd1ff7052.aspx</guid>
      <link>http://www.artiso.com/ProBlog/PermaLink,guid,ac224d14-4a24-4858-bf8c-c0ecd1ff7052.aspx</link>
      <pubDate>Fri, 22 Jun 2007 15:22:39 GMT</pubDate>
      <description>&lt;p&gt;
In Excel kann man ein Textfeld anlegen und diesem einen variablen Inhalt geben. Hierzu
markiert man das Textfeld und gibt in der Formelzeile z.B. einen Verweis auf eine
Zelle ein (=A1). In A1 kann nun eine beliebige Formel stehen, z.B. ="Summe: " &amp;amp;
SUMME(A2:A20). Möchte man in den text einen Zeilenumbruch einfügen, dann kann man
die Funktion ZEICHEN(10) verwenden, also z.B. = "Summe 2006: " &amp;amp; SUMME(A2:A20)
&amp;amp; ZEICHEN(10) &amp;amp; "Summe 2007: " &amp;amp; SUMME(B2:B20)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=ac224d14-4a24-4858-bf8c-c0ecd1ff7052" /&gt;</description>
      <comments>http://www.artiso.com/ProBlog/CommentView,guid,ac224d14-4a24-4858-bf8c-c0ecd1ff7052.aspx</comments>
      <category>Excel</category>
    </item>
    <item>
      <trackback:ping>http://www.artiso.com/ProBlog/Trackback.aspx?guid=c5ed87f3-0498-4b53-8ba5-345572b199d5</trackback:ping>
      <pingback:server>http://www.artiso.com/ProBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.artiso.com/ProBlog/PermaLink,guid,c5ed87f3-0498-4b53-8ba5-345572b199d5.aspx</pingback:target>
      <dc:creator>Thomas Schissler</dc:creator>
      <wfw:comment>http://www.artiso.com/ProBlog/CommentView,guid,c5ed87f3-0498-4b53-8ba5-345572b199d5.aspx</wfw:comment>
      <wfw:commentRss>http://www.artiso.com/ProBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=c5ed87f3-0498-4b53-8ba5-345572b199d5</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Gruppierungen in Excel sind eine feine Sache. Möchte man allerdings untenstehendes
Beispiel gruppieren, ergibt sich ein Problem. 
</p>
        <p>
          <a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B6%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="240" src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B5%5D.png" width="222" border="0" />
          </a>
        </p>
        <p>
Die Gruppenzeile soll in diesem Fall oben stehen. Standardmäßig geht Excel aber davon
aus, dass die unterste Zeile einer Gruppe bei einer eingeklappten Gruppierung übrig
bleibt. Damit sieht dann das Resultat in dem Beispiel so aus, dass die Gruppe
gar nicht mehr angezeigt wird:
</p>
        <p>
          <a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B8%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="168" src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B7%5D.png" width="240" border="0" />
          </a>
        </p>
        <p>
Es gibt eine Möglichkeit, dies über eine Einstellung zu ändern. In Excel 2003 findet
man die Menü Daten / Gruppierung und Gliederung / Einstellungen. In Excel 2007
ist die Einstellung etwas versteckt. Unter Data befindet sich im Bereich Outline rechts
unten ein kleines Kästchen. 
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B49%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="114" src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D_thumb%5B35%5D.png" width="823" border="0" />
          </a>
        </p>
        <p>
Klickt man darauf, dann öffnet sich ein Fenster, in dem man nun die Option Summary
rows below detail abwählen kann.
</p>
        <p>
          <a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B53%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="141" src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D_thumb%5B37%5D.png" width="298" border="0" />
          </a>
          <br />
Damit kann man die Gruppierung nun wie gewünscht einstellen.
</p>
        <p>
          <a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B55%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="173" src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B54%5D.png" width="240" border="0" />
          </a>
        </p>
        <p>
Noch ein kleiner Tipp: Mit Shift + Alt + Pfeil rechts kann man die Gruppierung auch
per Tastatur für die aktuell markierten Zeilen einstellen. Shift + Alt + Pfeil links
hebt die entsprechende Gruppierung auf.
</p>
        <img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=c5ed87f3-0498-4b53-8ba5-345572b199d5" />
      </body>
      <title>Richtung f&amp;uuml;r Gruppierungen in Excel</title>
      <guid isPermaLink="false">http://www.artiso.com/ProBlog/PermaLink,guid,c5ed87f3-0498-4b53-8ba5-345572b199d5.aspx</guid>
      <link>http://www.artiso.com/ProBlog/PermaLink,guid,c5ed87f3-0498-4b53-8ba5-345572b199d5.aspx</link>
      <pubDate>Wed, 09 May 2007 12:06:20 GMT</pubDate>
      <description>&lt;p&gt;
Gruppierungen in Excel sind eine feine Sache. Möchte man allerdings untenstehendes
Beispiel gruppieren, ergibt sich ein Problem. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B6%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=240 src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B5%5D.png" width=222 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Die Gruppenzeile soll in diesem Fall oben stehen. Standardmäßig geht Excel aber davon
aus, dass die unterste Zeile einer Gruppe bei einer eingeklappten Gruppierung übrig
bleibt. Damit sieht dann das Resultat in dem&amp;nbsp;Beispiel so aus, dass die Gruppe
gar nicht mehr angezeigt wird:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B8%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=168 src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B7%5D.png" width=240 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Es gibt eine Möglichkeit, dies über eine Einstellung zu ändern. In Excel 2003 findet
man die&amp;nbsp;Menü Daten / Gruppierung und Gliederung / Einstellungen. In Excel 2007
ist die Einstellung etwas versteckt. Unter Data befindet sich im Bereich Outline rechts
unten ein kleines Kästchen. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B49%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=114 src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D_thumb%5B35%5D.png" width=823 border=0&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Klickt man darauf, dann öffnet sich ein Fenster, in dem man nun die Option Summary
rows below detail abwählen kann.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B53%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=141 src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D_thumb%5B37%5D.png" width=298 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
Damit kann man die Gruppierung nun wie gewünscht einstellen.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B55%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=173 src="http://www.artiso.com/ProBlog/content/binary/WindowsLiveWriter/RichtungfrGruppierungeninExcel_C65A/image%7B0%7D%5B54%5D.png" width=240 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Noch ein kleiner Tipp: Mit Shift + Alt + Pfeil rechts kann man die Gruppierung auch
per Tastatur für die aktuell markierten Zeilen einstellen. Shift + Alt + Pfeil links
hebt die entsprechende Gruppierung auf.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=c5ed87f3-0498-4b53-8ba5-345572b199d5" /&gt;</description>
      <comments>http://www.artiso.com/ProBlog/CommentView,guid,c5ed87f3-0498-4b53-8ba5-345572b199d5.aspx</comments>
      <category>Excel</category>
    </item>
    <item>
      <trackback:ping>http://www.artiso.com/ProBlog/Trackback.aspx?guid=be972cf4-3f7b-4753-b9f7-e6f2cfe76f95</trackback:ping>
      <pingback:server>http://www.artiso.com/ProBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.artiso.com/ProBlog/PermaLink,guid,be972cf4-3f7b-4753-b9f7-e6f2cfe76f95.aspx</pingback:target>
      <dc:creator>Thomas Schissler</dc:creator>
      <wfw:comment>http://www.artiso.com/ProBlog/CommentView,guid,be972cf4-3f7b-4753-b9f7-e6f2cfe76f95.aspx</wfw:comment>
      <wfw:commentRss>http://www.artiso.com/ProBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=be972cf4-3f7b-4753-b9f7-e6f2cfe76f95</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Mit OleDB lassen sich sehr einfach Excel-Dateien lesen. Man macht sich einen Connectionstring
der ungefähr so aussieht:
</p>
        <font color="#0000ff">
          <p>
            <font face="Courier New" size="2">Dim</font>
          </p>
        </font>
        <font size="2">
          <font face="Courier New"> connectionString <font color="#0000ff">As</font><font color="#0000ff">String</font> = <font color="#800000">"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="</font> &amp; ExcelFileName &amp; <font color="#800000">";Extended Properties='Excel
8.0;HDR=No;"</font></font>
        </font>
        <p>
          <font color="#800000" size="2">
            <font color="#000000">Nun kann man eine ganz normale
Connection öffnen und wie gewohnt z.B. über ein Select-Statement ein DataSet befüllen.</font>
          </font>
        </p>
        <font color="#800000">
          <font color="#000000">
            <p>
              <font size="2">
                <font face="Courier New">
                  <font color="#0000ff">Dim</font> conn <font color="#0000ff">As</font> OleDbConnection
= <font color="#0000ff">New</font> OleDbConnection(connectionString)<br />
conn.Open()<br /><font color="#0000ff">Dim</font> dt <font color="#0000ff">As</font> DataTable = <font color="#0000ff">New</font> DataTable()<br /><font color="#0000ff">Dim</font> oleDbDataAdapter <font color="#0000ff">As</font> OleDbDataAdapter
= <font color="#0000ff">New</font> OleDbDataAdapter(<font color="#800000">"SELECT
* FROM [Tabelle1]"</font>, conn)<br />
oleDbDataAdapter.Fill(dt)<br />
oleDbDataAdapter.Dispose()<br />
oleDbDataAdapter = </font>
              </font>
              <font size="2">
                <font face="Courier New">
                  <font color="#0000ff">Nothing<br /></font>conn.Close()</font>
              </font>
            </p>
            <p>
              <font size="2">Das Problem ist dabei, wenn in Excel z.B. Integer und Textwerte in
einer Spalte gemischt stehen und die Integerwerte dabei überwiegen, wird diese Spalte
als Integer angelegt und die Textwerte stehen im Dataset dann als NULL. Das kann man
umgehen, wenn man am Connectionstring den Parameter IMEX=1 anhängt. Damit wird ein
"ImportMixedTypes"-Mode aktiviert, der gemischte Spalten immer als Text interpretiert.</font>
            </p>
          </font>
        </font>
        <font color="#800000">
          <font color="#0000ff">
            <p>
              <font face="Courier New" size="2">Dim</font>
            </p>
          </font>
          <font size="2">
            <font face="Courier New">
              <font color="#000000"> connectionString </font>
              <font color="#0000ff">As</font>
              <font color="#000000">
              </font>
              <font color="#0000ff">String</font>
              <font color="#000000"> = </font>
              <font color="#800000">"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="</font>
              <font color="#000000"> &amp; </font>
              <font color="#0000ff">Me</font>
              <font color="#000000">.tbImportdatei.Text
&amp; </font>
              <font color="#800000">";Extended Properties='Excel 8.0;HDR=No;IMEX=1'"</font>
            </font>
          </font>
          <p>
            <font size="2">
              <font face="Courier New">
                <font color="#800000">
                  <font face="Trebuchet MS" color="#000000">Das
Problem bei der ganzen Sache ist nur, dass nun standardmäßig die ersten 8 Zeilen geprüft
werden. Sind diese alle Integers, wird die Saplte auch als Integer definiert, auch
wenn weiter unten noch Textwerte kommen. Man findet hier an verschiedenen Stellen
den Hinweis auf einen weiteren Parameter MaxScanRows. Dieser scheint aber nicht zu
funktionieren, wie man auch aus diesem <a href="http://support.microsoft.com/kb/257819/en-us">MSDN-Artikel</a> ersehen
kann. Statt dessen muss man die Einstellung in der Registry vornehmen, wenn man eine
andere Anzahl prüfen möchte. Hierzu passt man im Zweig</font>
                </font>
              </font>
            </font>
          </p>
          <div class="indent">
            <strong class="uiterm">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel</strong>
          </div>
          <p>
            <font size="2">
              <font face="Courier New">
                <font color="#800000">
                  <font face="Trebuchet MS" color="#000000">
                  </font>
                </font>
              </font>
            </font> 
</p>
          <p>
            <font size="2">
              <font face="Courier New">
                <font color="#800000">
                  <font face="Trebuchet MS" color="#000000">den
Parameter TypeGuessRows an. Dieser Wert kann auf 1-16 Zeilen eingestellt werden.
Ein Wert von 0 bedeutet dass die ersten 16384 Zeilen geprüft werden, um festzustellen,
ob der mixed Mode verwendet werden muss oder ob der Datentyp eindeutig bestimmt werden
kann. Dass das eigentlich keine saubere Lösung ist, ist klar. Wer will schon seinen
Kunden zumuten, in der Registry rumzupfuschen? Aber es scheint im Moment keine bessere
Lösung zu geben.</font>
                </font>
              </font>
            </font>
          </p>
          <p>
            <font size="2">
              <font face="Courier New">
                <font color="#800000">
                  <font face="Trebuchet MS" color="#000000">HDR=No
bedeutet im obigen Fall übrigens, dass die Excel-Datei keine Header-Zeile hat.</font>
                </font>
              </font>
            </font>
          </p>
        </font>
        <img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=be972cf4-3f7b-4753-b9f7-e6f2cfe76f95" />
      </body>
      <title>Import von gemischten Excel-Spalten &amp;uuml;ber OLEDB</title>
      <guid isPermaLink="false">http://www.artiso.com/ProBlog/PermaLink,guid,be972cf4-3f7b-4753-b9f7-e6f2cfe76f95.aspx</guid>
      <link>http://www.artiso.com/ProBlog/PermaLink,guid,be972cf4-3f7b-4753-b9f7-e6f2cfe76f95.aspx</link>
      <pubDate>Sun, 14 Jan 2007 15:23:55 GMT</pubDate>
      <description>&lt;p&gt;
Mit OleDB lassen sich sehr einfach Excel-Dateien lesen. Man macht sich einen Connectionstring
der ungefähr so aussieht:
&lt;/p&gt;
&lt;font color=#0000ff&gt; 
&lt;p&gt;
&lt;font face="Courier New" size=2&gt;Dim&lt;/font&gt;
&lt;/font&gt;&lt;font size=2&gt;&lt;font face="Courier New"&gt; connectionString &lt;font color=#0000ff&gt;As&lt;/font&gt; &lt;font color=#0000ff&gt;String&lt;/font&gt; = &lt;font color=#800000&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="&lt;/font&gt; &amp;amp;&amp;nbsp;ExcelFileName &amp;amp; &lt;font color=#800000&gt;";Extended Properties='Excel
8.0;HDR=No;"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;font color=#800000 size=2&gt;&lt;font color=#000000&gt;Nun kann man eine ganz normale Connection
öffnen und wie gewohnt z.B. über ein Select-Statement ein DataSet befüllen.&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font color=#800000&gt;&lt;font color=#000000&gt; 
&lt;p&gt;
&lt;font size=2&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;Dim&lt;/font&gt; conn &lt;font color=#0000ff&gt;As&lt;/font&gt; OleDbConnection
= &lt;font color=#0000ff&gt;New&lt;/font&gt; OleDbConnection(connectionString)&lt;br&gt;
conn.Open()&lt;br&gt;
&lt;font color=#0000ff&gt;Dim&lt;/font&gt; dt &lt;font color=#0000ff&gt;As&lt;/font&gt; DataTable = &lt;font color=#0000ff&gt;New&lt;/font&gt; DataTable()&lt;br&gt;
&lt;font color=#0000ff&gt;Dim&lt;/font&gt; oleDbDataAdapter &lt;font color=#0000ff&gt;As&lt;/font&gt; OleDbDataAdapter
= &lt;font color=#0000ff&gt;New&lt;/font&gt; OleDbDataAdapter(&lt;font color=#800000&gt;"SELECT * FROM
[Tabelle1]"&lt;/font&gt;, conn)&lt;br&gt;
oleDbDataAdapter.Fill(dt)&lt;br&gt;
oleDbDataAdapter.Dispose()&lt;br&gt;
oleDbDataAdapter = &lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;Nothing&lt;br&gt;
&lt;/font&gt;conn.Close()&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;Das Problem ist dabei, wenn in Excel z.B. Integer und Textwerte in einer
Spalte gemischt stehen und die Integerwerte dabei überwiegen, wird diese Spalte als
Integer angelegt und die Textwerte stehen im Dataset dann als NULL. Das kann man umgehen,
wenn man am Connectionstring den Parameter IMEX=1 anhängt. Damit wird ein "ImportMixedTypes"-Mode
aktiviert, der gemischte Spalten immer als Text interpretiert.&lt;/font&gt;
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#800000&gt;&lt;font color=#0000ff&gt; 
&lt;p&gt;
&lt;font face="Courier New" size=2&gt;Dim&lt;/font&gt;
&lt;/font&gt;&lt;font size=2&gt;&lt;font face="Courier New"&gt;&lt;font color=#000000&gt; connectionString &lt;/font&gt;&lt;font color=#0000ff&gt;As&lt;/font&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;font color=#0000ff&gt;String&lt;/font&gt;&lt;font color=#000000&gt; = &lt;/font&gt;&lt;font color=#800000&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="&lt;/font&gt;&lt;font color=#000000&gt; &amp;amp; &lt;/font&gt;&lt;font color=#0000ff&gt;Me&lt;/font&gt;&lt;font color=#000000&gt;.tbImportdatei.Text
&amp;amp; &lt;/font&gt;&lt;font color=#800000&gt;";Extended Properties='Excel 8.0;HDR=No;IMEX=1'"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;&lt;font face="Trebuchet MS" color=#000000&gt;Das
Problem bei der ganzen Sache ist nur, dass nun standardmäßig die ersten 8 Zeilen geprüft
werden. Sind diese alle Integers, wird die Saplte auch als Integer definiert, auch
wenn weiter unten noch Textwerte kommen. Man findet hier an verschiedenen Stellen
den Hinweis auf einen weiteren Parameter MaxScanRows. Dieser scheint aber nicht zu
funktionieren, wie man auch aus diesem &lt;a href="http://support.microsoft.com/kb/257819/en-us"&gt;MSDN-Artikel&lt;/a&gt; ersehen
kann. Statt dessen muss man die Einstellung in der Registry vornehmen, wenn man eine
andere Anzahl prüfen möchte. Hierzu passt man im Zweig&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;div class=indent&gt;&lt;strong class=uiterm&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel&lt;/strong&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;&lt;font face="Trebuchet MS" color=#000000&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;&lt;font face="Trebuchet MS" color=#000000&gt;den
Parameter TypeGuessRows an. Dieser Wert kann&amp;nbsp;auf 1-16 Zeilen eingestellt werden.
Ein Wert von 0 bedeutet dass die ersten 16384 Zeilen geprüft werden, um festzustellen,
ob der mixed Mode verwendet werden muss oder ob der Datentyp eindeutig bestimmt werden
kann. Dass das eigentlich keine saubere Lösung ist, ist klar. Wer will schon seinen
Kunden zumuten, in der Registry rumzupfuschen? Aber es scheint im Moment keine bessere
Lösung zu geben.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;font face="Courier New"&gt;&lt;font color=#800000&gt;&lt;font face="Trebuchet MS" color=#000000&gt;HDR=No
bedeutet im&amp;nbsp;obigen Fall übrigens, dass die Excel-Datei keine Header-Zeile hat.&lt;/font&gt;
&lt;/p&gt;
&lt;/font&gt;&gt;&gt;&gt;&lt;img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=be972cf4-3f7b-4753-b9f7-e6f2cfe76f95" /&gt;</description>
      <comments>http://www.artiso.com/ProBlog/CommentView,guid,be972cf4-3f7b-4753-b9f7-e6f2cfe76f95.aspx</comments>
      <category>Excel;Tipps und Tricks</category>
    </item>
  </channel>
</rss>