6

データを含む一連の列と行を含む Excel シートがあります。完全な Excel シート データを JSON として読み取り、後で JSON をファイルに書き込めるようにしたいと考えています。これどうやってするの?

サンプルデータ:

Names    RegNo    Description
ABCD     12345    DemoInfo
XYZ      67890    DemoInfo2
4

3 に答える 3

9

ADO.NET OleDb プロバイダー経由で Excel シートに接続します。次に、C# 用の JSON ライブラリを使用して JSON 文字列を生成し、ファイルを保存します。(または@boadesが提案したように、JavascriptSerialzerを使用してください)。

この例では、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 = $@"
                Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source={pathToExcel};
                Extended Properties=""Excel 12.0 Xml;HDR=YES""
            ";

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

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

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

                    //LINQ query - when executed will create anonymous objects for each row
                    var query = rdr.Cast<DbDataRecord>().Select(row => 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);
                }
            }
        }
    }
}

リンク:

于 2012-12-05T09:22:35.627 に答える
2

CSV として保存します。次に、File.ReadLines を使用して各行を列挙し、続いて String.Split を使用して各列を読み取ります。データを JSON 文字列としてフォーマットし、ファイルに保存します。

于 2012-12-05T06:38:40.637 に答える
2

http://exceldatareader.codeplex.com/ライブラリを試すことができます。Excelから何らかのオブジェクトにデータを読み取り、JavaScriptSerializerを使用してjsonに変換する必要があります

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);
        }
    }
于 2012-12-05T09:57:32.933 に答える