2012-02-06 6 views
38

मैं सी # में एक नेट-विंडोज़ अनुप्रयोग है का उपयोग किए बिना सी # में excel फ़ाइल को पढ़ने के लिए। मुझे एक्सेल खोलने और इसे संसाधित करने की आवश्यकता है। मैं कैसे Microsoft.Office.Interop.Excel पुस्तकालयों का उपयोग किए बिना ऐसा कर सकते हैं?कैसे Microsoft.Office.Interop.Excel पुस्तकालयों

उत्तर

35
var fileName = @"C:\ExcelFile.xlsx"; 
var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; ; 
using (var conn = new OleDbConnection(connectionString)) 
{ 
    conn.Open(); 

    var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "SELECT * FROM [" + sheets.Rows[0]["TABLE_NAME"].ToString() + "] "; 

     var adapter = new OleDbDataAdapter(cmd); 
     var ds = new DataSet(); 
     adapter.Fill(ds); 
    } 
} 
+3

नोट- आपकी शीट पासवर्ड सुरक्षित होने पर ओएलडीडीबी काम नहीं करता है। –

+0

धन्यवाद, बस मैं – Mana

+0

@ अलेक्संदर के लिए क्या देख रहा था, क्या यह समाधान लिनक्स पर भी काम करता है? – Dalton

1

आप Excel फ़ाइल से डेटा को पढ़ने के लिए OLEDB कोशिश कर सकते हैं। पालन ​​के रूप में मैं, OLEDB का उपयोग कर के खिलाफ आग्रह करता हूँ अपनी एक सर्वर पर चलाने के लिए जा रहा है, खासकर यदि प्रयास करें ..

DataSet ds_Data = new DataSet(); 
OleDbConnection oleCon = new OleDbConnection(); 

string strExcelFile = @"C:\Test.xlsx"; 
oleCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelFile + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";; 

string SpreadSheetName = ""; 

OleDbDataAdapter Adapter = new OleDbDataAdapter(); 
OleDbConnection conn = new OleDbConnection(sConnectionString); 

string strQuery; 
conn.Open(); 

int workSheetNumber = 0; 

DataTable ExcelSheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 

SpreadSheetName = ExcelSheets.Rows[workSheetNumber]["TABLE_NAME"].ToString(); 

strQuery = "select * from [" + SpreadSheetName + "] "; 
OleDbCommand cmd = new OleDbCommand(strQuery, conn); 
Adapter.SelectCommand = cmd; 
DataSet dsExcel = new DataSet(); 
Adapter.Fill(dsExcel); 
conn.Close(); 
2

। इसका लंबे समय में आप अधिक खर्च होने की संभावना - जैसे हम एक लघु उद्योगों काम OLEDB sptroc में excel फ़ाइल पढ़ने के साथ एक संग्रहीत प्रक्रिया बुला था और एसक्यूएल बॉक्स दुर्घटनाग्रस्त रखा! मैंने ओलेडीबी सामान को स्पोक से बाहर ले लिया और यह सर्वर को दुर्घटनाग्रस्त कर दिया। Considerations for server-side Automation of Office के संबंध में -

एक बेहतर तरीका मैंने पाया Office 2003 और XML फ़ाइलों के साथ यह करने के लिए है। नोट:

रेफरी एक्सेल से पढ़ने के लिए: http://www.roelvanlisdonk.nl/?p=924 एक एक्सेल स्प्रेडशीट लिखने के लिए

रेफरी (अन्य उदाहरण खोजने के लिए और अधिक शोध करते कृपया): http://weblogs.asp.net/jgaylord/archive/2008/08/11/use-linq-to-xml-to-generate-excel-documents.aspx Office 2003 इस उड़ान भरने के लिए के लिए एक न्यूनतम आवश्यकता है

public void ReadExcelCellTest() 
     { 
      XDocument document = XDocument.Load(@"C:\BDATA\Cars.xml"); 
      XNamespace workbookNameSpace = @"urn:schemas-microsoft-com:office:spreadsheet"; 

      // Get worksheet 
      var query = from w in document.Elements(workbookNameSpace + "Workbook").Elements(workbookNameSpace + "Worksheet") 
         where w.Attribute(workbookNameSpace + "Name").Value.Equals("Settings") 
         select w; 
      List<XElement> foundWoksheets = query.ToList<XElement>(); 
      if (foundWoksheets.Count() <= 0) { throw new ApplicationException("Worksheet Settings could not be found"); } 
      XElement worksheet = query.ToList<XElement>()[0]; 

      // Get the row for "Seat" 
      query = from d in worksheet.Elements(workbookNameSpace + "Table").Elements(workbookNameSpace + "Row").Elements(workbookNameSpace + "Cell").Elements(workbookNameSpace + "Data") 
        where d.Value.Equals("Seat") 
        select d; 
      List<XElement> foundData = query.ToList<XElement>(); 
      if (foundData.Count() <= 0) { throw new ApplicationException("Row 'Seat' could not be found"); } 
      XElement row = query.ToList<XElement>()[0].Parent.Parent; 

      // Get value cell of Etl_SPIImportLocation_ImportPath setting 
      XElement cell = row.Elements().ToList<XElement>()[1]; 

      // Get the value "Leon" 
      string cellValue = cell.Elements(workbookNameSpace + "Data").ToList<XElement>()[0].Value; 

      Console.WriteLine(cellValue); 
     } 
+1

यह नहीं इतना OLEDB अपने सर्वर के लिए एक खतरा है कि है, यह एक संग्रहीत प्रक्रिया के माध्यम से बाहरी-टू-एसक्यूएल-सर्वर चला रहा है जो वास्तव में खतरनाक है। – philu

2

मैं हाल ही में इस पुस्तकालय है कि एक DataSet में एक Excel कार्यपुस्तिका फ़ाइल धर्मान्तरित पाया: Excel Data Reader

48

मैं अत्यधिक एक्सेल 2007/2010 फ़ाइलें (कार्यालय ओपन एक्सएमएल प्रारूप, xlsx) पढ़ने के लिए Excel 97-2003 फ़ाइलें (xls) और ExcelPackage पढ़ने के लिए CSharpJExcel सलाह देते हैं।

वे दोनों पूरी तरह से काम करते हैं। उनके पास कुछ भी निर्भरता नहीं है।

CSharpJExcel का उपयोग कर नमूना:

Workbook workbook = Workbook.getWorkbook(new System.IO.FileInfo(fileName)); 
var sheet = workbook.getSheet(0); 
... 
var content = sheet.getCell(colIndex, rowIndex).getContents(); 
... 
workbook.close(); 

ExcelPackage का उपयोग कर नमूना:

using (ExcelPackage xlPackage = new ExcelPackage(existingFile)) 
{ 
    // get the first worksheet in the workbook 
    ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[1]; 
    int iCol = 2; // the column to read 

    // output the data in column 2 
    for (int iRow = 1; iRow < 6; iRow++) 
    Console.WriteLine("Cell({0},{1}).Value={2}", iRow, iCol, 
     worksheet.Cell(iRow, iCol).Value); 

    // output the formula in row 6 
    Console.WriteLine("Cell({0},{1}).Formula={2}", 6, iCol, 
    worksheet.Cell(6, iCol).Formula); 

} // the using statement calls Dispose() which closes the package. 

संपादित:

एक अन्य परियोजना, ExcelDataReader, है करने के लिए लगता है कि नहीं है योग्यता दोनों प्रारूपों को संभालने के लिए। मैंने जो भी उल्लेख किया है, उतना ही आसान है।

  • NPOI: Port of the Apache POI library to .NET:
    , बहुत शक्तिशाली मुक्त, और खुला स्रोत

    भी अन्य पुस्तकालयों रहे हैं। एक्सेल (97-2010) के अलावा यह वर्ड और पावरपॉइंट फ़ाइलों का भी समर्थन करता है।

  • ExcelLibrary:
    यह केवल एक्सेल 97-2003 (xls) फ़ाइलों का समर्थन करता है।

  • EPPlus:
    ExcelPackage का एक एक्सटेंशन। उपयोग करने में आसान (मुझे लगता है)।

+2

यह एक्सेलडाटा रीडर ओएलईडीबी की तुलना में कमाल और हास्यास्पद रूप से तेज़ है। –

+0

एक्सेलडाटा रीडर गिटहब में माइग्रेट कर रहा है: https://github.com/ExcelDataReader/ExcelDataReader –

0

आप इंटरॉप का उपयोग नहीं करना चाहते हैं, तो आप OfficeWriter की कोशिश कर सकते हैं। फ़ाइल पर आपको वास्तव में कितनी प्रोसेसिंग करने की आवश्यकता है, इस पर निर्भर करता है कि यह अधिक हो सकता है। आप एक नि: शुल्क परीक्षण का अनुरोध कर सकते हैं। documentation site पर एक पूरी तरह से प्रलेखित एपीआई उपलब्ध है।

अस्वीकरण: मैं उन इंजीनियरों में से एक हूं जिन्होंने नवीनतम संस्करण बनाया है।

0

तुम भी मुझे क्या करना है और इस तरह एक व्यावसायिक नियंत्रण से कर सकता है: http://www.syncfusion.com/products/reporting-edition/xlsio

मैं एक व्यावसायिक समाधान के साथ समाप्त होने से पहले साल के लिए struging की है। मैंने पहली बार ओएलडीडीबी दृष्टिकोण की कोशिश की जो मेरे विकास पर्यावरण में उपयोग करना बहुत आसान है लेकिन तैनात करने के लिए एक नाइटमेयर हो सकता है। तब मैंने ओपन सोर्स सॉल्यूशंस की कोशिश की लेकिन अधिकांश पुराने हैं और खराब समर्थन है।

सिंकफ्यूजन से xlsio नियंत्रण केवल वे हैं जिन्हें मैं उपयोग करता हूं और खुश हूं लेकिन अन्य मौजूद हैं। यदि आप इसे सहारा दे सकते हैं, तो संकोच न करें, यह सबसे अच्छा समाधान है। क्यूं कर? क्योंकि इसकी प्रणाली के साथ कोई निर्भरता नहीं है और तुरंत कार्यालय के सभी संस्करणों का समर्थन करता है। अन्य फायदों के अलावा, यह वास्तव में तेज़ है।

और नहीं, मैं synfusion लिए काम नहीं करते;)

2

आप XLS फ़ाइलों के बजाय XLSX फ़ाइलों को खोलने की जरूरत है, http://npoi.codeplex.com/ एक महान पसंद है। हमने इसे अपनी परियोजनाओं पर अच्छे प्रभाव के लिए उपयोग किया है।

1

मैं Excel.dll पुस्तकालय जो है का इस्तेमाल किया है:

  • खुला स्रोत
  • हल्के
  • तेजी
  • xls के साथ संगत और xlsx

प्रलेखन यहाँ पर उपलब्ध: https://exceldatareader.codeplex.com/

जोरदार सिफ़ारिश लायक।

0

Ive सिर्फ एक समाधान के लिए खोज और भर में Spreadsheetlight

जो बहुत आशाजनक दिखता आ गई। इसका खुला स्रोत और एक नुजेट पैकेज के रूप में उपलब्ध है।

2

जीएसपीड.नेट की तलाश करें। यह एक ओपनसोर्स प्रोजेक्ट भी है और इसे Office स्थापित करने की आवश्यकता नहीं है। आप माइक्रोसॉफ्ट एक्सेल से एपीआई का उपयोग करके Google स्प्रेडशीट्स के साथ काम कर सकते हैं। यदि आप Google स्प्रेडशीट तक पहुंच प्राप्त करने के लिए पुराने कोड का पुन: उपयोग करना चाहते हैं, तो GSpread.NET सबसे अच्छा तरीका है।

Set objExcel = CreateObject("GSpreadCOM.Application") 
// Name    - User name, any you like 
// ClientIdAndSecret - `client_id|client_secret` format 
// ScriptId   - Google Apps script ID 
app.MailLogon(Name, ClientIdAndSecret, ScriptId); 

इसके अलावा कोड में कोई बदलाव नहीं: आप कुछ ही पंक्ति जोड़ने के लिए की जरूरत है।

http://scand.com/products/gspread/index.html