Bu adım adım makalede, bir DataSet Excel'de oluşturulmuş bir elektronik tablo XML dönüşümü açıklamaktadır. Excel elektronik tablo XML biçimini destekleyen öğe etiketleri ve öznitelikleri işlevleri gibi multi-sheet çalışma kitaplarını, formülleri, Excel ve biçimlendirmeleri hücre.
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
Bu adım adım örnek nasıl sunucu tarafı ve istemci tarafı bileşenleri gösterilmiştir birlikte teslim etmek ve Excel elektronik tablo XML görüntülemek için iş.
Default.htm, iki çerçeve içeren bir çerçeve kümesi olur. Üstbilgi çerçevesi sipariş kimliği listesini içerir ve bir Sipariş No, listeden seçildikten sonra ana çerçeve sipariş bilgilerini görüntüler.
Header.htm öğe etiketleri HTML ve komut dosyası için bir üstbilgi çerçevesi içerir.
Getdata.vb iki amaca hizmet verdiği bir HTTP denetleyicisidir. Üstbilgi çerçevesi için sipariş kimlikleri listesinde işleyici ekler ve ana çerçevede görüntülenen sipariş bilgilerini istekleri işler. HTTP işleyicisi sipariş bilgi isteği aldığında, sipariş için bir DataSet oluşturur ve bu DataSet XML betimlemesi çağırana döndürür.
Transform.XSLTDataSet XML Excel elektronik tablo XML biçimine dönüştürmek için kullanılan bir XSLT dosyasıdır.
Örnek kod Microsoft SQL Server'da sipariş verilerini kullanır Northwind örnek veritabanı. Örnek oluşturduğunuz ve Web uygulamasını (http://localhost) yerel bilgisayarınızda sınamanız olduğunu varsayar. Bir Web sunucusunda yerel bilgisayarınız üzerinde kullanacağınız değil, örnek URL'lerinde localhost ile sizin Web sunucunuzun adını değiştirin.
Veri kümesi oluştur
Bu bölümde, HTTP işleyicisi ve sipariş bilgilerini almak için gereken istemci tarafındaki bileşenler oluşturun. Ana çerçeve düz XML olarak DataSet döndürülür; DataSet değil dönüştürülür.
ExcelTransform adında boş bir Web projesi oluşturun. Bunu yapmak için şu adımları izleyin:
Dosya menüsünde Visual Studio'da. NET, Yeni ' yi tıklatın ve sonra da Project ' i tıklatın.
Visual Basic Projects ' ı tıklatın ve Boş bir Web projesi şablonu</a1>'ı tıklatın.
Proje http://localhost/ExcelTransform adlandırın ve sonra Tamam ' ı tıklatın.
Projeye bir başvuru ekleyin. Bunu yapmak için şu adımları izleyin:
Proje) menüsünde Add Reference ' ı tıklatın.
.NET</a0> sekmesinde, bileşenler listesinde, System.data.dll ' ı tıklatın ve sonra da <a2>Seç</a2>'i tıklatın.
System.dll, System.Web.dll ve System.XML.dll bir önceki adımı yineleyin.
Tamam ' ı tıklatın.
Proje menüsünde Add Class <a1>Ad</a1> Getdata.vb, sınıf'ı tıklatın ve sonra Tamam ' ı tıklatın.
Kod getdata.vb aşağıdakiyle değiştir.
Not<username>Kullanıcı KIMLIĞINI ve parolasını değiştirmek için doğru değerler, bu kodu çalıştırmadan önce = < güçlü parola >. Kullanıcı KIMLIĞI'in veritabanında bu işlemi gerçekleştirmek için uygun izinlere sahip olduğundan emin olun.
Imports System.Web
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Data
Imports System.Data.SqlClient
Public Class GetData
Implements IHttpHandler
Private sConn As String = _
"User ID=<username>;Password=<strong password>;Initial Catalog=Northwind;Data Source=YourSQLServer;"
Public ReadOnly Property IsReusable() As Boolean _
Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
Public Sub ProcessRequest(ByVal context As HttpContext) _
Implements IHttpHandler.ProcessRequest
Dim conn As SqlConnection
Dim sOrderRequested As String
sOrderRequested = context.Request.Item("OrderID")
If Not (sOrderRequested > "") Then
'=== If no order is requested, assume that this is a request
'=== to fill the drop-down list in the Header.htm template
'=== with the list of OrderIDs.
'Get a DataSet for a list of OrderIDs.
Dim sSQL As String = "Select OrderID from Orders"
conn = New SqlConnection(sConn)
conn.Open()
Dim cmd As New SqlCommand(sSQL, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
'Open the header template for the frameset and fill
'in the <option> child nodes for the drop-down lists.
Dim sHTML As String, sOrderID As String
Dim xmlDoc As New XmlDocument()
xmlDoc.Load(context.Server.MapPath("header.htm"))
Dim oElem As XmlElement = _
xmlDoc.DocumentElement.GetElementsByTagName("select").Item(0)
Dim oChild As XmlElement
Do While rdr.Read
sOrderID = rdr.GetInt32(0).ToString
oChild = xmlDoc.CreateElement("option")
oChild.SetAttribute("value", sOrderID)
oChild.InnerText = sOrderID
oElem.AppendChild(oChild)
Loop
rdr.Close()
conn.Close()
'Return the modified header template.
context.Response.Write(xmlDoc.InnerXml)
Else
'=== If an order is requested, create a DataSet for that
'=== order and return the results to the client browser.
'Build a DataSet for the order.
conn = New SqlConnection(sConn)
conn.Open()
Dim ds As DataSet = New DataSet("Order")
Dim CustDa As SqlDataAdapter = New SqlDataAdapter( _
"SELECT OrderID, CompanyName, Address, City, Region, PostalCode, Country, Freight " & _
"FROM Customers " & _
"INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID " & _
"WHERE (((Orders.OrderID)=" & sOrderRequested & "))", conn)
CustDa.Fill(ds, "Customer")
Dim ItemsDa As SqlDataAdapter = New SqlDataAdapter( _
"SELECT Products.ProductName, [Order Details].Quantity, " & _
" [Order Details].[UnitPrice]*[Quantity]*(1-[Discount]) AS ItemTotal " & _
"FROM Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID " & _
"WHERE (([Order Details].[OrderID]) = " & sOrderRequested & ")", conn)
ItemsDa.Fill(ds, "Items")
conn.Close()
SendResults(context, ds)
context.Response.End()
End If
End Sub
Private Sub SendResults(ByVal context As HttpContext, ByVal ds As DataSet)
'Write the XML for the DataSet.
context.Response.ContentType = "text/xml"
context.Response.Output.Write(ds.GetXml)
context.Response.End()
End Sub
End Class
Not: Getdata.vbsConn SQL çalıştıran bir bilgisayar için geçerli bir bağlantı dizesi için atamaya değiştirmek Server ve Northwind örnek veritabanı içerir.
Proje menüsünde Yeni Öğe Ekle'yi tıklatın, Web yapılandırması dosyası şablonu tıklatın ve sonra Tamam ' ı tıklatın.
Proje menüsünde Ekle HTML sayfası, <a1>Ad</a1> Header.htm, sayfa'ı tıklatın ve sonra Tamam ' ı tıklatın.
Görünüm menüsünden HTML kaynağı ' nı tıklatın.
Header.htm kodu aşağıdaki ile Değiştir:
<html>
<script language="javascript">
<!--
function OrderSelect_onchange() {
window.parent.frames("main").location.replace("about:blank");
if(OrderSelect.selectedIndex>0) {
window.setTimeout("OpenOrder()", 50);
}
}
function OpenOrder() {
var order = OrderSelect.options(OrderSelect.selectedIndex).value;
window.parent.frames("main").location.href=
"http://localhost/exceltransform/getdata.aspx?orderid=" + order;
}
//-->
</script>
<body>
<select id="OrderSelect" onchange="return OrderSelect_onchange()">
<option value="0">Select an Order</option>
</select>
</body>
</html>
Not: HTTP işleyicisi, bir XML belgesi olarak Header.htm yükler. Hata yüklemek için <a0></a0>, Header.htm iyi biçimlendirilmiş olmalıdır XML. Header.htm değiştirirseniz, iyi biçimlendirilmiş olduğu; tüm öğelerin doğru başlangıç ve bitiş etiketleri olmalıdır ve tüm özniteliği atamalarını tırnak imleri içine alınmalıdır emin olun.
Proje menüsünde HTML sayfayı Ekle'yi tıklatın, <a1>adı</a1>, default.htm dosyası çerçeve şablonu seçin ve Tamam'ı tıklatın. Sorulduğunda, üst çerçeve türünü tıklatın ve sonra Tamam ' ı tıklatın.
Görünüm menüsünden HTML kaynağı ' nı tıklatın.
Üstbilgi çerçevesi src ve kaydırma özniteliklerini frameset.htm, aşağıdaki gibi ayarlayın:
Solution Explorer'da (Çözüm Gezgini), default.htm ' ı sağ tıklatın ve sonra da Başlangıç sayfası olarak ayarla'yı tıklatın.
Örneği sınamak için aşağıdaki adımları izleyin:
Hata Ayıkla) menüsünde, hata ayıklama olmadan Başlat ' ı tıklatın. Çerçeve tarayıcıda a?a?? aç?lan listesini siparişinin kimliklerinin bir listesini içeren bir üstbilgi çerçevesi içinde açılır.
Tüm sipariş KIMLIĞI a?a?? aç?lan listeden seçin.
Ana çerçevede görüntülenen XML inceleyin. XML Getdata HTTP işleyicisi isteğinize göre oluşturulan DataSet bir gösterimidir.
Ek sipariş kimliği, sonuçları incelemek için a?a?? aç?lan listeden seçin.
Web uygulamasını sınama işlemini bitirdiğinizde, Microsoft ınternet Explorer'ı kapatın.
DataSet XML Excel'e dönüştürme
Bu bölümde, Excel'de görüntülemek için DataSet dönüştürmek için ek bir kod ekleyebilirsiniz.
Yeni oluşturduğunuz ExcelTransform Web projesini açın.
Proje menüsünde Yeni Öğe Ekle'yi tıklatın, XSLT dosyası adı Transform.xslt, proje şablonu tıklatın ve sonra Tamam ' ı tıklatın.
Replace the contents of Transform.xslt with the following:
Getdata.vb içinde SendResults işlevi aşağıdaki ile Değiştir:
Private Sub SendResults(ByVal context As HttpContext, ByVal ds As DataSet)
Dim sOrderID As String = ds.Tables(0).Rows(0).Item(0)
'Set up the response for Excel.
context.Response.ContentType = "application/vnd.ms-excel"
context.Response.Charset = ""
'Transform the DataSet XML using transform.xslt
'and return the results to the client in Response.Outputstream.
Dim tw As XmlTextWriter
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(ds)
Dim xslTran As XslTransform = New XslTransform()
xslTran.Load(context.Server.MapPath("transform.xslt"))
xslTran.Transform(xmlDoc, Nothing, context.Response.OutputStream)
context.Response.End()
End Sub
Örneği sınamak için aşağıdaki adımları izleyin:
Hata Ayıkla) menüsünde, hata ayıklama olmadan Başlat ' ı tıklatın. Çerçeve tarayıcıda a?a?? aç?lan listesini siparişinin kimliklerinin bir listesini içeren bir üstbilgi çerçevesi içinde açılır.
Tüm sipariş KIMLIĞI a?a?? aç?lan listeden seçin. Istediğiniz DataSet oluşturuldu ve olduğunu elektronik tablo XML'DE dönüştürülmüş ve Excel'de görüntülenen unutmayın. Excel'deki verileri biçimlendirme ve hesaplama içerir.
Web uygulamasını sınama işlemini tamamladığınızda, ınternet Explorer'dan çıkın.
Dönüştürülmüş XML (isteğe bağlı) bir dosyaya kaydedin...
HTTP işleyicisi, önceki bölümde, istemciye dönüştürülmüş XML akıp. DataSet XML ve dönüşümünün tersinin sonuçları bir dosyaya kaydetmek isteyebilirsiniz. Dönüşümün size beklediğiniz sonuçları vermez olduğunu fark ederseniz, bu yararlı bir sorun giderme adımı olabilir. Bu yaklaşım, DataSet XML ve dönüştürülmüş XML olası hatalar için incelemek için kullanabilirsiniz.
Not: örnek XML dosyaları Web uygulama klasörüne kaydeder. Aşağıdaki adımlarda gösterildiği gibi klasörün izinlerini değiştirmek olabilir.
Yazma izinleri klasör için ASP.NET ayarlama işlemi:
Windows Gezgini'ni başlatın.
Web uygulama klasörünü bulun. C:\Inetpub\Wwwroot\ExcelTransform varsayılan yoldur.
ExcelTransform klasörünü sağ tıklatın ve sonra da Özellikler ' i tıklatın.
Güvenlik sekmesinde Ekle ' yi tıklatın.
Seçilecek nesne adlarını girin altında nesnenin yazın YourComputerName \aspnet adlandırın ve sonra Tamam ' ı tıklatın.
Güvenlik sekmesinde, WriteYourComputerName \aspnet hesabı için yazma iznine izin vermek ve sonra Tamam ' ı tıklatın, seçmek için tıklatın.
Getdata.vb içinde SendResults işlevi aşağıdaki ile Değiştir:
Private Sub SendResults(ByVal context As HttpContext, ByVal ds As DataSet)
Dim sOrderID As String = ds.Tables(0).Rows(0).Item(0)
'First, save the XML representation of the DataSet in a file
'and add a processing instruction to the XML so that it can be
'transformed client-side.
Dim tw As XmlTextWriter
tw = New XmlTextWriter(context.Server.MapPath("order" & sOrderID & ".xml"), System.Text.Encoding.UTF8)
tw.Formatting = Formatting.Indented
tw.Indentation = 3
tw.WriteStartDocument()
tw.WriteProcessingInstruction("xml-stylesheet", _
"type='text/xsl' href='http://localhost/ExcelTransform/transform.xslt'")
ds.WriteXml(tw)
tw.Close()
'Second, transform the DataSet XML and save it to a file.
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(ds)
Dim xslTran As XslTransform = New XslTransform()
xslTran.Load(context.Server.MapPath("transform.xslt"))
tw = New XmlTextWriter(context.Server.MapPath("order" & sOrderID & ".xls"), System.Text.Encoding.UTF8)
tw.Formatting = Formatting.Indented
tw.Indentation = 3
tw.WriteStartDocument()
xslTran.Transform(xmlDoc, Nothing, tw)
tw.Close()
'Optionally, redirect to the saved transformation.
context.Response.Redirect( _
"http://localhost/ExcelTransform/order" & sOrderID & ".xls")
context.Response.End()
End Sub
Örneği sınamak için aşağıdaki adımları izleyin:
Hata Ayıkla menüsünde Debugging Başlat'ı tıklatın.
Sipariş a?a?? aç?lan listeden seçin. Dönüştürülmüş XML Excel ana çerçevede görüntülenir.
Ham DataSet XML C:\Inetpub\Wwwroot\ExcelTransform\order NNNNN inceleyin .xml. XML, herhangi bir metin düzenleyicisinde veya Excel'de açabilirsiniz. Excel'de Order.xml açarsanız, stil uygulamak isteyip istemediğiniz sorulur.
Elektronik tablonun XML, NNNNN C:\Inetpub\Wwwroot\ExcelTransform\order inceleyin .xls. XML, herhangi bir metin düzenleyicisinde veya Excel'de açabilirsiniz.
Excel kendi XSLT dosyasını oluştururken, önce bir çalışma kitabı şablonu biçimlendirmeyi içeren bir Excel ve gerekir ve çalışma kitabını kaydedersiniz XML elektronik tablo formülleri oluşturun. XML, XSL ifadeler ve doğru şekilde DataSet XML dönüştürmek için gereken öğeler içerdiği için daha sonra değiştirebilirsiniz. Excel, kaydettiğiniz XML değiştirdiğinizde, aşağıdakilere dikkat edin:
Bir çalışma sayfasındaki hücreleri bir <table>tarafından temsil edilen XML öğesi. <table> iki öznitelikleri, ss:ExpandedColumnCount ve hangi hücrelerin belirlediğiniz ss:ExpandedRowCount, çalışma sayfasında kullanılan (yani, "kullanılan aralık"). Çalışma sayfasının değişen satırları veya sütunları (veya her ikisini birden) vardır, bu öznitelikleri, dönüştürme sırasında ayarlayın. Bir DataSet XML belirli düğümlerin sayısı transform.xsltss:ExpandedRowCount</a1> özniteliğinde belirlenen Not temel.
Hücrelerdeki formüller RC gösteriminde ve A1 gösterimle gösterilir.
Bir çalışma sayfasındaki hücrelere uyguladığınız her farklı biçimlendirme bileşimini kendi stil adı verilir. Stilleri <style>içinde depolanan XML elektronik tablosu öğesidir.
Not .NET Framework 1.1 kullanan geliştiriciler, .NET Framework 1.0 ve .NET Framework 1.1 arasında çok sınıf yapılan değişikliklerin bilmelisiniz. Örneğin, bazı yükleme ve dönüştürme yöntemleri (Bu makalede kullanılan sürümü de dahil) sürümleri yüklenmiş .NET Framework 1. 1'ile başlayan geçersiz kabul edilir. XslTransform.Transform yöntem hakkında ek bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
288215
(http://support.microsoft.com/kb/288215/
)
Microsoft Excel 2002 ve XML
307021
(http://support.microsoft.com/kb/307021/
)
Nasıl yapılır: Visual Basic .NET kullanarak, XML verilerini Microsoft Excel 2002'ye aktarma
306022
(http://support.microsoft.com/kb/306022/
)
Nasıl yapılır: Visual Basic. NET'i kullanarak, verileri bir Excel çalışma kitabına aktarma
307985
(http://support.microsoft.com/kb/307985/
)
ASP.NET HTTP modüllerini ve HTTP işleyicileri genel bakış
308000
(http://support.microsoft.com/kb/308000/
)
ASP.NET HTTP modülü Visual Basic. NET'i kullanarak oluşturma
311461
(http://support.microsoft.com/kb/311461/
)
<a1>XML</a1> Microsoft Word 2002 için zengin metin biçimi (RTF) için dönüştürmek için ASP.NET veya Visual Basic .NET kullanma
285891
(http://support.microsoft.com/kb/285891/
)
Excel 2002, XML elektronik tablo oluşturmak için Visual Basic'in veya bir ASP kullanma
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:319180
(http://support.microsoft.com/kb/319180/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.