Hoe u ASP kunt gebruiken voor het samenstellen van XML spreadsheet voor client-side weergave

Samenvatting

In dit artikel ziet u Microsoft Active Server Pages (ASP)-script dat u maakt van een werkblad in de indeling XML-werkblad (XMLSS) met behulp van het onderdeel Office-werkblad. De XMLSS kan worden weergegeven aan de clientzijde op verschillende manieren:
  • In het onderdeel werkblad op een webpagina
  • In Microsoft Excel weergegeven ter plekke in de browser
  • Rechtstreeks in Microsoft Excel geopend

Meer informatie

Met behulp van het onderdeel werkblad werkbladen maken in server-side code biedt meer schaalbaarheid en betere prestaties in vergelijking met het gebruik van server-side automatisering van Microsoft Excel. Doen we niet recomment automatisering van Office-toepassingen, met inbegrip van Excel op de server. Deze methode moet worden vermeden wanneer andere alternatieven voor het bereiken van dezelfde resultaten voor u beschikbaar zijn. XMLSS, kunnen veel van de functies voor het onderdeel werkblad en de Microsoft Excel behouden. Vertegenwoordigen een handvol die functies meerdere vellen werkmappen, celopmaak Autofilter, celformules en opnieuw berekend. Het onderdeel werkblad is een objectmodel dat overeenkomt met het objectmodel voor Microsoft Excel. Dus als u bekend met het Excel-objectmodel bent, kunt u gemakkelijk toepassen gedeelte van de bestaande Excel-programmacode, met wijzigingen voor gebruik met het onderdeel werkblad.

In het volgende voorbeeld wordt gedemonstreerd hoe een werkmap meerdere vellen in de werkbladcomponent gebruiken met ASP XMLSS genereren. Het monster wordt ook beschreven hoe u de resulterende XMLSS-client kunt weergeven op een webpagina of in Microsoft Excel.

ASP-script XMLSS bouwen met behulp van het onderdeel werkblad

De volgende ASP-code opslaan als XMLSS.asp in de virtuele hoofdmap van uw webserver. De hoofdmap is standaard C:\inetpub\wwwroot.
<% Language=VBScript %>
<%
Response.Buffer = True
Response.ContentType = "text/xml"

Dim NumOrders, NumProds, r
NumOrders = 300
NumProds = 10

Dim oSS
Dim oOrdersSheet
Dim oTotalsSheet
Dim oRange
Dim c

Set oSS = CreateObject("OWC10.Spreadsheet")
Set c = oSS.Constants

'Rename Sheet1 to "Orders", rename Sheet2 to "Totals" and remove Sheet3
Set oOrdersSheet = oSS.Worksheets(1)
oOrdersSheet.Name = "Orders"
Set oTotalsSheet = oSS.Worksheets(2)
oTotalsSheet.Name = "Totals"
oSS.Worksheets(3).Delete

'=== Build the First Worksheet (Orders) ==============================================

'Add headings to A1:F1 of the Orders worksheet and apply formatting
Set oRange = oOrdersSheet.Range("A1:F1")
oRange.Value = Array("Order Number", "Product ID", "Quantity", "Price", "Discount", "Total")
oRange.Font.Bold = True
oRange.Interior.Color = "Silver"
oRange.Borders(c.xlEdgeBottom).Weight = c.xlThick
oRange.HorizontalAlignment = c.xlHAlignCenter

'Apply formatting to the columns
oOrdersSheet.Range("A:A").ColumnWidth = 20
oOrdersSheet.Range("B:E").ColumnWidth = 15
oOrdersSheet.Range("F:F").ColumnWidth = 20
oOrdersSheet.Range("A2:E" & NumOrders + 1 _
).HorizontalAlignment = c.xlHAlignCenter
oOrdersSheet.Range("D2:D" & NumOrders + 1).NumberFormat = "0.00"
oOrdersSheet.Range("E2:E" & NumOrders + 1).NumberFormat = "0 % "
oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "$ 0.00" '"_($* #,##0.00_)"

'Obtain the order information for the first five columns in the Orders worksheet
'and populate the worksheet with that data starting at row 2
Dim aOrderData
aOrderData = GetOrderInfo
oOrdersSheet.Range("A2:E" & NumOrders + 1).Value = aOrderData

'Add a formula to calculate the order total for each row and format the column
oOrdersSheet.Range("F2:F" & NumOrders + 1).Formula = "=C2*D2*(1-E2)"
oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "_( $* #,##0.00 _)"

'Apply a border to the used rows
oOrdersSheet.UsedRange.Borders(c.xlInsideHorizontal).Weight = c.xlThin
oOrdersSheet.UsedRange.BorderAround , c.xlThin, 15

'Turn on AutoFilter and display an initial criteria where
'the Product ID (column 2) is equal to 5
oOrdersSheet.UsedRange.AutoFilter
oOrdersSheet.AutoFilter.Filters(2).Criteria.FilterFunction = c.ssFilterFunctionInclude
oOrdersSheet.AutoFilter.Filters(2).Criteria.Add "5"
oOrdersSheet.AutoFilter.Apply

'Add a Subtotal at the end of the usedrange
oOrdersSheet.Range("F" & NumOrders + 3).Formula = "=SUBTOTAL(9, F2:F" & NumOrders + 1 & ")"

'Apply window settings for the Orders worksheet
oOrdersSheet.Activate 'Makes the Orders sheet active
oSS.Windows(1).ViewableRange = oOrdersSheet.UsedRange.Address
oSS.Windows(1).DisplayRowHeadings = False
oSS.Windows(1).DisplayColumnHeadings = False
oSS.Windows(1).FreezePanes = True
oSS.Windows(1).DisplayGridlines = False

'=== Build the Second Worksheet (Totals) ===========================================

'Change the Column headings and hide row headings
oTotalsSheet.Activate
oSS.Windows(1).ColumnHeadings(1).Caption = "Product ID"
oSS.Windows(1).ColumnHeadings(2).Caption = "Total"
oSS.Windows(1).DisplayRowHeadings = False

'Add the product IDs to column 1
Dim aProductIDs
aProductIDs = GetProductIDs
oTotalsSheet.Range("A1:A" & NumProds).Value = aProductIDs
oTotalsSheet.Range("A1:A" & NumProds).HorizontalAlignment = c.xlHAlignCenter

'Add a formula to column 2 that computes totals per product from the Orders Sheet
oTotalsSheet.Range("B1:B" & NumProds).Formula = _
"=SUMIF(Orders!B$2:B$" & NumOrders + 1 & ",A1,Orders!F$2:F$" & NumOrders + 1 & ")"
oTotalsSheet.Range("B1:B" & NumProds).NumberFormat = "_( $* #,##0.00 _)"

'Apply window settings for the Totals worksheet
oSS.Windows(1).ViewableRange = oTotalsSheet.UsedRange.Address

'=== Setup for final presentation ==================================================

oSS.DisplayToolbar = False
oSS.AutoFit = True
oOrdersSheet.Activate

Response.Write oSS.XMLData
Response.End


Function GetOrderInfo()
ReDim aOrderInfo(NumOrders,5)
Dim aPrice, aDisc
aPrice = Array(10.25, 9.5, 2.34, 6.57, 9.87, 4.55, 6, 13.05, 3.3, 5.5)
aDisc = Array(0, 0.1, 0.15, 0.2)
For r = 0 To NumOrders-1
aOrderInfo(r, 0) = "'" & String(7-Len(CStr(r+1)), "0") & r+1 'Col 1 is Order Number
aOrderInfo(r, 1) = Int(Rnd() * NumProds) + 1 'Col 2 is Product ID
aOrderInfo(r, 2) = Int(Rnd() * 20) + 1 'Col 3 is Quantity
aOrderInfo(r, 3) = aPrice(aOrderInfo(r, 1)-1) 'Col 4 is Price
aOrderInfo(r, 4) = aDisc(Int(Rnd() * 4)) 'Col 5 is Discount
Next
GetOrderInfo = aOrderInfo
End Function

Function GetProductIDs()
ReDim aPIDs(NumProds, 1)
For r = 0 To NumProds-1
aPIDs(r, 0) = r+1
Next
GetProductIDs = aPIDs
End Function

%>

De XMLSS weergeven op een webpagina

Als het monster XMLSS weergeven op een webpagina, moet u alleen de eigenschap XMLURL voor een onderdeel werkblad naar de URL voor de ASP-code, als volgt instellen:
<html>
<body>

<object classid="clsid:0002E551-0000-0000-C000-000000000046" id="Spreadsheet1">
<param name="XMLURL" value="http://YourWebServer/xmlss.asp">
</object>

</body>

</html>

Opmerking Als u Microsoft Office 2003 gebruikt, is het wellicht te wijzigen van de klasse-id in de bovenstaande code als die van toepassing zijn.

In het voorgaande HTML-code wordt de eigenschap XMLURL met behulp van een code < param > ingesteld. U kunt ook de eigenschap XMLURL instellen tijdens runtime indien gewenst, met de volgende code.
   Spreadsheet1.XMLURL = "http://YourWebServer/xmlss.asp"

De XMLSS weergeven in Microsoft Excel

De XMLSS dat wordt gemaakt met het onderdeel werkblad kan worden geopend in Microsoft Excel. Opmaak en functies die u in het onderdeel werkblad implementeert kunnen worden gedeeld met Microsoft Excel. Het onderdeel Werkblad ondersteunt sommige functies die in Excel niet. Excel ondersteunt bovendien enkele functies die niet door het werkbladonderdeel. Deze XML-tags of kenmerken die niet worden geïmplementeerd door Excel worden genegeerd wanneer de XMLSS wordt geopend.

U kunt de resultaten van het ASP-script in Microsoft Excel, als volgt te werk:

  1. Start Microsoft Excel.
  2. Klik op openen in het menu bestand .
  3. Typ http://YourWebServer/xmlss.aspin het vak Bestandsnaam en klik vervolgens op openen.
Onderzoek van de werkmap en houd er rekening mee dat de gegevens en opmaak die zijn toegepast tijdens het uitvoeren van alle in de werkmap aanwezig zijn wanneer het wordt geopend in Excel. Er is één uitzondering: de kop bijschriften die zijn gemaakt in het onderdeel werkblad niet overgenomen in Excel omdat dit is een functie van het onderdeel werkblad dat Microsoft Excel niet deelt. Als u XMLSS maken met behulp van het onderdeel werkblad voor het weergeven van het bestand in Excel, worden de verschillende functies van elk ondersteunt.

Een andere manier de XMLSS ASP is gemaakt in Microsoft Excel openen is het leveren van het type Excel Multipurpose Internet Mail Extensions (MIME) als de ContentType in ASP. Als u het Excel-MIME-type en blader naar de ASP kan de XMLSS in Microsoft Excel ter plekke in de browser worden weergegeven. Ga hiervoor als volgt te werk:
  1. XMLSS.asp in een teksteditor openen.
  2. Wijzig de volgende regel in het script:
    Response.ContentType = "text/xml"
    Wijzig de regel code in die lijkt op het volgende:
    Response.ContentType = "application/vnd.ms-excel"
  3. Sla de wijzigingen in XMLSS.asp en start Windows Internet Explorer.
  4. Ga naar http://YourWebServer/XMLSS.asp. Het XML-werkblad wordt in Microsoft Excel die ter plekke in de browser weergegeven.

Referenties

Ga naar het onderwerp Office Web Components op de volgende Microsoft-website voor meer informatie:
Voor meer informatie klikt u op de volgende artikelnummers om de artikelen in de Microsoft Knowledge Base te bekijken:

285891 het gebruik van Visual Basic- of ASP-voor het maken van een XML-werkblad van Excel 2002 en Excel 2003

278976 het gebruik van XSL naar Excel XML-werkblad voor het gebruik van server-side transformatie

Overwegingen voor de automatisering van Office server-side 257757

Eigenschappen

Artikel-id: 288130 - Laatst bijgewerkt: 14 feb. 2017 - Revisie: 1

Feedback