2010-11-06 12 views
6

मुझे SQL Server 2008 में संग्रहीत प्रक्रिया से प्राप्त कुछ डेटा निर्यात करने में सक्षम होना चाहिए। डेटा लौटाए जाने के बाद मुझे इसे आउटपुट करने या इसे एक नई एक्सेल स्प्रैडशीट में निर्यात करने में सक्षम होना चाहिए।सी #: एक्सेल स्प्रेडशीट में कैसे निर्यात करें? एक्सएसएलटी/LINQ/अन्य तरीकों का उपयोग कर?

ऐसा करने का सबसे आसान तरीका क्या है, क्या LINQ ऐसा कर सकता है? या क्या मुझे एक्सएसएलटी का उपयोग करने के लिए मजबूर किया गया है? मुझे लगता है कि मुझे पहले अपने डेटा को एक्सएमएल में वापस कर दिया जाना चाहिए और फिर एक्सएसएलटी लागू करें - एक्सएसएलटी एक्सएमएल दस्तावेजों के खिलाफ काम करता है।

XSLT 2 2008 वी.एस. इसलिए हम अभी भी XSLT 1 उपयोग करने के लिए उपलब्ध नहीं है - लेकिन यह वास्तव में जाने का रास्ता या सबसे अच्छा विकल्प है?

मुझे लगता है कि वैकल्पिक विधि का उपयोग करना संभव होगा लेकिन शायद मैं गलत हूं।

मैं वास्तव में किसी भी सलाह, ट्यूटोरियल आदि

धन्यवाद

+1

एक सरल CSV फ़ाइल बारे में क्या? – dtb

उत्तर

7

सीएसवी या एक्सएमएल को आउटपुट करने के लिए आपको वास्तव में किसी भी कार्यक्षमता की आवश्यकता नहीं है जो xpath 1.0 में नहीं है ... यह दुर्लभ है कि मैं ऐसी स्थिति में भाग गया जिसके लिए कुछ और जटिल होना आवश्यक था।

आप LINQ के साथ एक XElement में चुन सकते हैं ... लेकिन एक बयान में यह कर का मतलब होगा आप अपने डेटा मान्य नहीं कर सकता। मैं आमतौर पर किनारे के मामलों को संभालने के लिए तत्वों के संग्रह पर पुनरावृत्ति समाप्त करता हूं।

हालांकि डाल के रूप में सीएसवी आसान है और एक्सएमएल से कम जगह लेता है बाहर ... मुझे लगता है कि एक्सएमएल tbh overused है।

एक वैकल्पिक (* और मुझे नहीं यह सलाह देते हैं) एक्सेल दस्तावेज अंदर से एसक्यूएल सर्वर क्वेरी करने के लिए किया जाएगा। यह था कि आप सीधे अपने डेटा को एक स्प्रेड शीट में चुन सकते हैं। यह काफी पुराना है और मुझे यह पसंद नहीं है।

+0

+1 इसके लिए अधिक होगा, सीएसवी जाने का रास्ता है। – Jazza

0

ADO.NET भी Excel के लिए एक ड्राइवर है की सराहना करेंगे। तो यदि आपका डेटा स्वाभाविक रूप से "आकार" में डेटाबेस है तो मैं शायद इसका उपयोग करूँगा।

आप एक्सेल इंटरॉप इस्तेमाल कर सकते हैं अगर आप स्वरूपण करना चाहता था और एक्सेल के स्प्रेडशीट क्षमताओं का लाभ उठाने के लिए है, लेकिन यह शायद सरल आंकड़ा अंतरण के लिए भी "गंदा" है।

इसके अलावा, जैसा DTB बताते हैं, अगर यह एक सरल एक तालिका डेटा फ़ाइल था, आप CSV फ़ाइल इस्तेमाल कर सकते हैं। हालांकि मूल एक्सेल नहीं है, इसे आसानी से आयात किया जा सकता है और आमतौर पर एक्सेल में बाहरी डेटा प्राप्त करने का सबसे आसान तरीका है।

+0

i belive xml भी काम करेगा, लेकिन शायद यह एक टेबल प्रारूप xml होना होगा, मुझे यकीन नहीं है कि यदि आपके पास एक विविध वस्तु संरचना है तो यह कैसे व्यवहार करेगा। एक्सएमएल/एक्सएसएलटी कहने के लिए –

0

आप Excel फ़ाइलें लिखने के लिए एक नेट पैकेज की जरूरत है, नए के लिए

NExcelAPI

वर्ष एक्सेल फ़ाइल स्वरूप (< = 2003) के लिए

, या

ExcelPackage

कोशिश कार्यालय ओपन एक्सएमएल प्रारूप। दोनों पुस्तकालयों के लिए आपको एक्सेल स्थापित करने की आवश्यकता नहीं है।

संपादित करें: यहाँ पुराने (एक्सेल 2002/2003) XML आधारित फ़ाइल स्वरूप

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

1

इसकी संभव के लिए एक और एक एसक्यूएल सर्वर से एक्सेल में यह सीधे बाहर पुश करने के लिए है।

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

यह एक कोड है कि वस्तु की एक सरणी का निर्यात एक एक्सेल 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; 
} 
संबंधित मुद्दे