[英]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;
}
ADO.NET還有一個Excel驅動程序。 因此,如果您的數據自然是“形狀”的數據庫,那么我可能會使用它。
如果要進行格式化並利用Excel的電子表格功能,可以使用Excel互操作,但這對於簡單的數據傳輸來說可能太“混亂”了。
另外,正如dtb所指出的,如果它是一個簡單的單表數據文件,你可以使用CSV文件。 雖然不是原生Excel,但它可以很容易地導入,通常是將外部數據導入Excel的最簡單方法。
如果您需要.NET包來編寫Excel文件,請嘗試
對於舊的Excel文件格式(<= 2003),或
對於較新的Office Open XML格式。 對於這兩個庫,您不需要安裝Excel。
編輯:這是另一個舊的(Excel 2002/2003)基於XML的文件格式
如果你花了幾塊錢,我在過去的幾年里使用過xPort Tools並對它很滿意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.