2010-11-06 29 views
6

我需要能夠導出從SQL Server 2008中的存儲過程接收的一些數據。一旦數據返回,我需要能夠輸出它或導出到一個新的Excel電子表格。C#:如何導出到Excel電子表格?使用XSLT/LINQ /其他方法?

這樣做的最簡單方法是什麼?LINQ可以做到這一點嗎?還是我被迫使用XSLT?我認爲我必須首先將我返回的數據轉換爲XML,然後應用XSLT--因爲XSLT對XML文檔起作用。

XSLT 2不可用在2008年,所以我們還是要使用XSLT 1 VS - 但,這真的是要走的路還是最好的選擇?

我會認爲它會使用其他方法是可能的,但也許我錯了。

我會很感激的任何建議,教程等

感謝

+1

怎麼樣一個簡單的CSV文件? – dtb 2010-11-06 13:27:28

回答

7

輸出到CSV或XML,你真的不需要,是不是在XPath 1.0中的任何功能...其罕見的,我跑成什麼需要更復雜的情況。

,你可以選擇與LINQ一個的XElement ......然而,在一個聲明中這樣做,這將意味着你無法驗證您的數據。我通常最終迭代一組元素來處理邊界情況。

不過了把爲CSV是更容易,花費更少的空間比XML ...我認爲XML是過度使用TBH。

的替代(*,我不推薦它)會從Excel文檔裏面查詢的SQL Server。 這就是你可以直接選擇你的數據到電子表格。這是相當古老的,我不太喜歡它tbh。

+0

對於說XML/XSLT會對此有點過分,因此CSV還是有待改進。 – Jazza 2010-11-08 11:51:57

0

ADO.NET也有Excel中的驅動程序。所以如果你的數據自然是一個「形狀」的數據庫,那麼我可能會使用它。

你可以使用Excel互操作,如果你想要做的格式,並充分利用Excel的電子表格功能,但是這可能是簡單的數據傳輸太「亂」。

而且,DTB指出,如果這是一個簡單的表格數據文件,您可以使用CSV文件。雖然不是原生的Excel,但它可以很容易地導入,並且通常是將外部數據導入Excel的最簡單方法。

+0

我相信xml也可以工作,但它可能必須是表格格式xml im不知道如果你有不同的對象結構它將如何表現。 – 2010-11-06 15:20:37

0

如果你需要一個.NET包寫入Excel文件,儘量

NExcelAPI

舊Excel文件格式(< = 2003),或

ExcelPackage

爲新Office Open XML格式。對於這兩個庫你都不需要安裝Excel。

編輯:這是另外一個對於上了年紀(EXCEL 2002/2003)基於XML的文件格式

http://www.carlosag.net/Tools/ExcelXmlWriter/

1

它可以從SQL Server推直出到Excel。

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=D:\testing.xls;', 
    'SELECT * FROM [SheetName$]') select * from SQLServerTable 

這個和更多的例子可從this source

0

如果你有幾美元的花費,在過去的幾年中我使用了xPort Tools,並且對它感到滿意。

2

是出口對象數組的代碼(你可以很容易與您的數據填充)到Excel spreadsheat:

public static void SaveToExcel(object[,] data) 
{ 
    Excel = Microsoft.VisualBasic.Interaction.CreateObject("Excel.Application", String.Empty); 
    Excel.ScreenUpdating = false; 
    dynamic workbook = Excel.workbooks; 
    workbook.Add(); 

    dynamic worksheet = Excel.ActiveSheet; 

    const int left = 1; 
    const int top = 1; 
    int height = data.GetLength(0); 
    int width = data.GetLength(1); 
    int bottom = top + height - 1; 
    int right = left + width - 1; 

    if (height == 0 || width == 0) 
     return; 

    dynamic rg = worksheet.Range[worksheet.Cells[top, left], worksheet.Cells[bottom, right]]; 
    rg.Value = data; 

    // Set borders 
    for (var i = 1; i <= 4; i++) 
     rg.Borders[i].LineStyle = 1; 

    // Set header view 
    dynamic rgHeader = worksheet.Range[worksheet.Cells[top, left], worksheet.Cells[top, right]]; 
    rgHeader.Font.Bold = true; 
    rgHeader.Interior.Color = 189 * (int)Math.Pow(16, 4) + 129 * (int)Math.Pow(16, 2) + 78; 
    rg.EntireColumn.AutoFit(); 

    // Show excel app 
    Excel.ScreenUpdating = true; 
    Excel.Visible = true; 
} 
相關問題