2012-12-05 13 views
5

Ich habe eine Excel-Tabelle, die eine Reihe von Spalten und Zeilen mit Daten hat. Ich möchte die kompletten Excel-Daten als JSON lesen, damit ich später den JSON in eine Datei schreiben kann. Wie kann ich das machen?Lesen von Daten aus Excel in Json-Objekt in C#

Beispieldaten:

Names RegNo Description 
ABCD  12345 DemoInfo 
XYZ  67890 DemoInfo2 

Antwort

1

Speichern als CSV. Verwenden Sie dann File.ReadLines, um über jede Zeile aufzuzählen, gefolgt von String.Split, um jede Spalte zu lesen. Formatieren Sie die Daten als JSON-Zeichenfolge und speichern Sie sie in einer Datei.

8

Verbinden Sie sich über den ADO.NET OleDb-Anbieter mit dem Excel-Arbeitsblatt. Verwenden Sie anschließend eine JSON-Bibliothek für C#, um die JSON-Zeichenfolge zu generieren, und speichern Sie die Datei. (Oder verwenden Sie den JavascriptSerialzer, wie von @boades vorgeschlagen).

In diesem Beispiel wird die JSON.NET-Bibliothek verwendet.

using System; 
using System.Linq; 
using System.Data.OleDb; 
using System.Data.Common; 
using Newtonsoft.Json; 
using System.IO; 

namespace ConsoleApplication1 { 
    class Program { 
     static void Main(string[] args) { 
      var pathToExcel = @"C:\path\to\excel\file.xlsx"; 
      var sheetName = "NameOfSheet"; 
      var destinationPath = @"C:\path\to\save\json\file.json"; 

      //Use this connection string if you have Office 2007+ drivers installed and 
      //your data is saved in a .xlsx file 
      var connectionString=String.Format(@" 
       Provider=Microsoft.ACE.OLEDB.12.0; 
       Data Source={0}; 
       Extended Properties=""Excel 12.0 Xml;HDR=YES"" 
      ",pathToExcel); 

      //Creating and opening a data connection to the Excel sheet 
      using (var conn=new OleDbConnection(connectionString)) { 
       conn.Open(); 

       var cmd=conn.CreateCommand(); 
       cmd.CommandText = String.Format(
        @"SELECT * FROM [{0}$]", 
        sheetName 
       ); 

       using (var rdr=cmd.ExecuteReader()) { 

        //LINQ query - when executed will create anonymous objects for each row 
        var query = 
         from DbDataRecord row in rdr 
         select new { 
          name = row[0], 
          regno = row[1], 
          description = row[2] 
         }; 

        //Generates JSON from the LINQ query 
        var json = JsonConvert.SerializeObject(query); 

        //Write the file to the destination path  
        File.WriteAllText(destinationPath, json); 
       } 
      } 
     } 
    } 
} 

Links:

+2

Hinweis JSon, die Sie Excel nicht installiert ist, dann können Sie nur die Microsoft Access-Datenbank-Engine Redistributable herunterladen, die zu diesem Zeitpunkt ist hier verfügbar: http://www.microsoft.com/en-gb/download/details.aspx?id=13255 – Family

+0

@Family aktualisiert, danke. –

2

Sie einen Versuch zu http://exceldatareader.codeplex.com/ Bibliothek geben kann. Sie müssen Daten aus Excel zu einem Objekt lesen, und als es konvertieren JavaScriptSerializer

public class MyRow 
{ 
    public string Cell1; 
    public string Cell2; 
    public string Cell3; 
} 

class Program 
{ 
     static void Main() 
     { 
      var list = new List<MyRow>(); 
      FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); 

      //1. Reading from a binary Excel file ('97-2003 format; *.xls) 
      IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
      //... 
      //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
      IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 


      //5. Data Reader methods 
      while (excelReader.Read()) 
      { 
        var obj = new MyRow 
        { 
         Cell1 = excelReader.GetString(0), 
         Cell2 = excelReader.GetString(1), 
         Cell3 = excelReader.GetString(2), 
        } 

        list.Add(obj); 
      } 

      //6. Free resources (IExcelDataReader is IDisposable) 
      excelReader.Close(); 
      var json = new JavaScriptSerializer().Serialize(list); 
      Console.WriteLine(json); 
     } 
    }