2012-12-05 22 views
5

Ho un foglio Excel che ha un set di colonne e righe con dati. Voglio leggere i dati completi del foglio di Excel come JSON, in modo che in seguito io possa scrivere il JSON in un file. Come posso fare questo?Lettura di dati da excel in oggetto Json in C#

dati del campione:

Names RegNo Description 
ABCD  12345 DemoInfo 
XYZ  67890 DemoInfo2 

risposta

1

Salva come CSV. Quindi utilizzare File.ReadLines per enumerare su ogni riga, seguito da String.Split per leggere ogni colonna. Formattare i dati come stringa JSON e salvarli in un file.

8

Connessione al foglio Excel tramite il provider OleDb ADO.NET. Quindi, utilizzare una libreria JSON per C# per generare la stringa JSON e salvare il file. (Oppure usa JavascriptSerialzer, come suggerito da @boades).

Questo esempio utilizza la libreria JSON.NET.

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); 
       } 
      } 
     } 
    } 
} 

vicini:

+2

Si noti che non è necessario installare Excel, è possibile basta scaricare il Microsoft Access Redistributable Database Engine, che in questo momento è disponibile qui: http://www.microsoft.com/en-gb/download/details.aspx?id=13255 – Family

+0

@Family Updated, grazie. –

2

Si può dare una prova per http://exceldatareader.codeplex.com/ biblioteca. È necessario leggere i dati da Excel a un oggetto, e poi convertirlo in JSON utilizzando 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); 
     } 
    }