2014-10-30 5 views
5

मेरा मानना ​​है कि इस मामले के साथ यहां बहुत चर्चा है। लेकिन मैं सभी पोस्ट पढ़ता हूं और कोशिश करता हूं लेकिन यह सी # के साथ कभी काम नहीं करता है। मेरा लक्ष्य सरल है कि मेरे पास मौजूदा सीएसवी फ़ाइल है। बस एक्सेल फ़ाइल को परिवर्तित करना और किया जाना चाहिए। कई लोगों ने कहा कि spire.xls का उपयोग करके कुछ मुझे लगता है कि एमएस .office.interop.excel इसे संभाल सकता है।सी # सीएसवी को एक्सएलएस में परिवर्तित करें (मौजूदा सीएसवी फ़ाइल का उपयोग करके)

Converting Excel File From .csv To .xlsx

मैं ऊपर मुद्दा पढ़ सकते हैं और यह मेरी समस्या के समान है। लेकिन ऊपर कोड मेरे पीसी में काम नहीं करता .. क्या मुझे इसका उपयोग करने के लिए अन्य डीएल आयात करने की आवश्यकता है। मैं बस उस साइट से कोड कॉपी करता हूं। फिर नीचे कॉपी ...

वर्तमान में MS.office.interop.excel और MS.office.interop.core

के रूप में लिब का उपयोग कर
Application app = new Application(); 
Workbook wb = app.Workbooks.Open(@"C:\testcsv.csv", Type.Missing, Type.Missing,    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
wb.SaveAs(@"C:\testcsv.xlsx", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
wb.Close(); 
app.Quit(); 
यहाँ

बहुत एक त्रुटि हो सकती हैं im। संशोधित कोड नीचे है और अब मैं केवल संदर्भ में MS.office.interop.excel और MS.office.interop.core का उपयोग कर रहा हूं। ऐसा लगता है कि मुझे एक और डीएलएल फ़ाइल का उपयोग करने की आवश्यकता है। वैसे भी मैंने उस कोड का पालन किया और नया कोड बनाया। यह त्रुटि को कम करता है लेकिन मुझे नहीं पता कि यह सही दृष्टिकोण है। नीचे मैंने अभी कोशिश की है।

 Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     object misValue = System.Reflection.Missing.Value; 

     System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; 
     System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

     xlApp = new Excel.ApplicationClass(); 
     xlWorkBook = xlApp.Workbooks.Add(misValue); 

     xlWorkBook = xlApp.Workbooks.Open(@"C:\testcsv.csv", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
     xlWorkBook.SaveAs(@"C:\testcsv.xlsx", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
     xlWorkBook.Close(); 

और यहाँ त्रुटि संदेश

// Error  3 The name 'XlFileFormat' does not exist in the current context C:\Users\jochoi\Desktop\joseph_BT_전류_code\DC_Test - ver01\DC_Test\DC.cs 528 54 DC_Test 
    // Error 4 The name 'XlSaveAsAccessMode' does not exist in the current context C:\Users\jochoi\Desktop\joseph_BT_전류_code\DC_Test - ver01\DC_Test\DC.cs 528 142 DC_Test 
    // Error 4 No overload for method 'Close' takes '0' arguments C:\Users\jochoi\Desktop\joseph_BT_전류_code\DC_Test - ver01\DC_Test\DC.cs 525 13 DC_Test 

मेरा लक्ष्य सिर्फ हड़पने है मौजूद csv फ़ाइल और सिर्फ फ़ाइल उत्कृष्टता प्राप्त करने के लिए बदल रहे हैं। क्या किसी के पास अन्य समाधान है क्योंकि यह उत्तर मेरे पीसी में काम नहीं करता है।

using Microsoft.Office.Interop.Excel; 

यह नाम स्थान XlFileFormat और XlSaveAsAccessMode वर्गों का उपयोग करने के लिए आवश्यक शामिल होंगे: (ग #)

+0

कृपया – 5uperdan

+0

प्राप्त होने वाली वास्तविक त्रुटि पोस्ट करें, हाँ, मैं अपने प्रश्न में अधिक जानकारी जोड़ता हूं और त्रुटि संदेश भी जोड़ता हूं .... –

+0

आप जिस प्रश्न से जुड़े हैं उससे लाइब्रेरी का उपयोग कर सकते हैं। या आप इस प्रश्न के उत्तर में उपयोग किए गए दृष्टिकोण को आजमा सकते हैं http://stackoverflow.com/questions/4781478/convert-csv-into-xls – 5uperdan

उत्तर

22

COM इंटरऑप सबसे अच्छा समाधान नहीं है, खासकर यदि आप server environment में अपना कोड चलाने की योजना बना रहे हैं।

माइक्रोसॉफ्ट वर्तमान की सिफारिश नहीं करता है, और (एएसपी, ASP.NET, DCOM, और NT सेवा सहित) किसी भी पहुंच से बाहर, गैर-सहभागी क्लाइंट अनुप्रयोग या घटक से समर्थन नहीं करता है, माइक्रोसॉफ्ट ऑफिस अनुप्रयोगों के स्वचालन , क्योंकि Office इस वातावरण में Office चलाए जाने पर अस्थिर व्यवहार और/या डेडलॉक प्रदर्शित कर सकता है।

एक और तरीका उस उद्देश्य के लिए उपयुक्त घटकों का उपयोग करना है।
मैंने EEplus का उपयोग किया है और यह गंदे काम करता है। इसमें एक एलजीपीएल लाइसेंस है लेकिन लेखक आपके वाणिज्यिक उत्पाद में इसका उपयोग करने के बारे में worried प्रतीत नहीं होता है।

बस nuget पैकेज स्थापित:

Install-Package EPPlus 

और इस कोड का उपयोग:

using System.IO; 
using OfficeOpenXml; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string csvFileName = @"FL_insurance_sample.csv"; 
     string excelFileName = @"FL_insurance_sample.xls"; 

     string worksheetsName = "TEST"; 

     bool firstRowIsHeader = false; 

     var format = new ExcelTextFormat(); 
     format.Delimiter = ','; 
     format.EOL = "\r";    // DEFAULT IS "\r\n"; 
     // format.TextQualifier = '"'; 

     using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFileName))) 
     { 
      ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName); 
      worksheet.Cells["A1"].LoadFromText(new FileInfo(csvFileName), format, OfficeOpenXml.Table.TableStyles.Medium27, firstRowIsHeader); 
      package.Save(); 
     } 

     Console.WriteLine("Finished!"); 
     Console.ReadLine(); 
    } 
} 

आप ExcelTextFormat का उपयोग कर आप सीवीएस की संरचना कॉन्फ़िगर कर सकते हैं।

मैंने इसे here से लिया गया कुछ डेटा के साथ परीक्षण किया है।

कुछ और नमूने here पाए जा सकते हैं।

अद्यतन:

एक अन्य विकल्प सीएसवी एक पाठ फ़ाइल के रूप में फ़ाइल को पढ़ने के लिए है:

private IEnumerable<string[]> ReadCsv(string fileName, char delimiter = ';') 
{ 
    var lines = System.IO.File.ReadAllLines(fileName, Encoding.UTF8).Select(a => a.Split(delimiter)); 
    return (lines); 
} 

और इस तरह के NPOI या ClosedXML के रूप में अन्य मुक्त स्रोत परियोजनाओं का उपयोग करें। NPOI और ClosedXMLसीएसवी नहीं पढ़ सकते हैं और रूपांतरण है, लेकिन समारोह ReadCsv का उपयोग कर आप इसे स्वयं कर सकते हैं कर सकते हैं।

इन दोनों परियोजनाओं में अनुमोदित लाइसेंस हैं।

NPOI रूपांतरण:

private static bool ConvertWithNPOI(string excelFileName, string worksheetName, IEnumerable<string[]> csvLines) 
{ 
    if (csvLines == null || csvLines.Count() == 0) 
    { 
    return (false); 
    } 

    int rowCount = 0; 
    int colCount = 0; 

    IWorkbook workbook = new XSSFWorkbook(); 
    ISheet worksheet = workbook.CreateSheet(worksheetName); 

    foreach (var line in csvLines) 
    { 
    IRow row = worksheet.CreateRow(rowCount); 

    colCount = 0; 
    foreach (var col in line) 
    { 
     row.CreateCell(colCount).SetCellValue(TypeConverter.TryConvert(col)); 
     colCount++; 
    } 
    rowCount++; 
    } 

    using (FileStream fileWriter = File.Create(excelFileName)) 
    { 
     workbook.Write(fileWriter); 
     fileWriter.Close(); 
    } 

    worksheet = null; 
    workbook = null; 

    return (true); 
} 

ClosedXML रूपांतरण:

private static bool ConvertWithClosedXml(string excelFileName, string worksheetName, IEnumerable<string[]> csvLines) 
{ 
    if (csvLines == null || csvLines.Count() == 0) 
    { 
    return (false); 
    } 

    int rowCount = 0; 
    int colCount = 0; 

    using (var workbook = new XLWorkbook()) 
    { 
    using (var worksheet = workbook.Worksheets.Add(worksheetName)) 
    { 
     rowCount = 1; 
     foreach (var line in csvLines) 
     { 
     colCount = 1; 
     foreach (var col in line) 
     { 
      worksheet.Cell(rowCount, colCount).Value = TypeConverter.TryConvert(col); 
      colCount++; 
     } 
     rowCount++; 
     } 

    } 
    workbook.SaveAs(excelFileName); 
    } 

    return (true); 
} 

अगर किसी रुचि रखता है तीन उत्पादों की तुलना अभिनय के लिए कुछ परीक्षण के साथ GitHub पर एक sample project नहीं है।

+0

बढ़िया, यह काम करता है। लेकिन क्या यह मुफ्त बर्तन है? क्योंकि मैं इसे अपनी कंपनी में उपयोग करने जा रहा हूं। मैं EPPlus 3.1.3.zip डाउनलोड करें। क्या यह फ्रीवेयर है? क्या मैं इसे अपनी कंपनी में उपयोग कर सकता हूं? –

+0

यह [एलजीपीएल] (http://choosealicense.com/licenses/) है। आप इसे [थ्रेड] (https://epplus.codeplex.com/discussions/208363) पढ़ सकते हैं। लेखक कहते हैं कि आप इसे अपने वाणिज्यिक प्रोजेक्ट में उपयोग कर सकते हैं। – LeftyX

+0

धन्यवाद .... यह मेरी कंपनी में उपयोग करना ठीक लगता है। महान और सहायक। –

-1

अपने फ़ाइल के शीर्ष पर निम्न पंक्ति सम्मिलित करें। यदि यह काम नहीं करता है तो आपको अपनी परियोजना में इस डीएलएल का संदर्भ भी जोड़ना पड़ सकता है।

बंद विधि निम्नलिखित बहस में लेता है:

  1. SaveChanges
  2. फ़ाइल का नाम
  3. RouteWorkbook

कि के लिए दस्तावेज़ here है।

उम्मीद है कि मदद करता है।

संबंधित मुद्दे