簡體   English   中英

C#:如何導出到Excel電子表格? 使用XSLT / LINQ /其他方法?

[英]C#: How to export to an excel spreadsheet? using XSLT / LINQ / Other methods?

我需要能夠導出從SQL Server 2008中的存儲過程接收的一些數據。一旦返回數據,我需要能夠輸出它或將其導出到新的Excel電子表格。

這樣做最簡單的方法是什么,LINQ可以這樣做嗎? 還是我被迫使用XSLT? 我假設我必須首先轉換返回到XML的數據然后應用XSLT - 因為XSLT對XML文檔起作用。

VS 2008中沒有XSLT 2,所以我們仍然需要使用XSLT 1 - 但這真的是最佳選擇嗎?

我認為可以使用替代方法,但也許我錯了。

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

謝謝

為了輸出到csv或xml,你真的不需要任何不在xpath 1.0中的功能......我很少遇到需要更復雜的情況。

你可以用linq選擇一個xelement ...但是在一個語句中這樣做意味着你無法驗證你的數據。 我通常最終迭代一組元素來處理邊緣情況。

作為csv使用更容易,並且比xml占用更少的空間......我認為xml被過度使用了。

另一種選擇(*和我不推薦它)是從excel文檔內部查詢sql server。 那就是您可以直接將數據選擇到電子表格中。 這是相當古老的,我不太喜歡它。

這個代碼可以將一個對象數組(您可以輕松地將其填充數據)導出到excel spreadheat:

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; 
} 

它可以從SQL Server直接推送到Excel。

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

提供了示例和更多示例。

ADO.NET還有一個Excel驅動程序。 因此,如果您的數據自然是“形狀”的數據庫,那么我可能會使用它。

如果要進行格式化並利用Excel的電子表格功能,可以使用Excel互操作,但這對於簡單的數據傳輸來說可能太“混亂”了。

另外,正如dtb所指出的,如果它是一個簡單的單表數據文件,你可以使用CSV文件。 雖然不是原生Excel,但它可以很容易地導入,通常是將外部數據導入Excel的最簡單方法。

如果您需要.NET包來編寫Excel文件,請嘗試

NExcelAPI

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

ExcelPackage

對於較新的Office Open XML格式。 對於這兩個庫,您不需要安裝Excel。

編輯:這是另一個舊的(Excel 2002/2003)基於XML的文件格式

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

如果你花了幾塊錢,我在過去的幾年里使用過xPort Tools並對它很滿意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM