Excelファイルを例として読む

78326 ワード

このチュートリアルでは、CからのExcelファイルを読む方法と、検証のような日常的なタスクのためのライブラリ、データベースへの変換、Web APIからのデータの保存、およびスプレッドシート内の数式の変更方法について説明します.この記事はIronxlコードサンプルを参照してください.NETコアコンソールアプリ.
Excelのファイルを読んで作成してください.NETの言語は簡単にirronlソフトウェアライブラリを使用しています.
Excelは、サーバーまたは相互運用にインストールする必要はありません.マイクロソフトよりも速く、より直感的なAPIを提供します.オフィス相互運用.エクセル.

概要

これらのステップ( CSV - xlsx & xls )を実行して、ExcelファイルをCで読みます.
  • CSVファイルをダウンロードしてください
  • Excelファイルの読み込みと読み込み
  • のExcelワークブックを作成する
  • セルを有効にし、セルの値を編集する
  • スプレッドシートデータの検証
  • エンティティフレームワークを使用したデータのエクスポート

  • Excelファイルからデータを読み込む
    Ironxlは、そうです.マイクロソフトExcel文書を読み、編集するのを容易にするネットライブラリ.このチュートリアルでは、Cシャープコードを使用してExcelファイルを読むことができます.
  • Ironxl Excelライブラリをインストールします.我々は、我々を使用してこれを行うことができますNuGet package または.Net Excel DLL.
  • ワークブックを使用します.Loadメソッドを使用して任意のXLS、XLSXまたはCSVドキュメントを読み込みます.
  • 直近の構文を使用してセル値を取得します
  • sheet["A11"].DecimalValue
    を含む
  • 当社からの専用の製品サポート.ネットエンジニア
  • マイクロソフトVisual Studio経由で簡単にインストール
  • 開発のための30日間無料試用テスト.からのライセンス
  • 私たちはどのように簡単にCのファイルを読むことができます.Ironxlライブラリを使用したネット.試料は3枚のエクセルシートを含んでいる.


    XLSまたはXLSXファイルを読む
    この例では、Excelファイルを効率的に読むことができます.最終的な高度な操作は、LINQの互換性と集計範囲の数学を示しています.
    C
    /**
    Read XLS or XLSX File
    anchor-read-an-xls-or-xlsx-file
    **/
    using IronXL;
    using System.Linq;
    //Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
    WorkBook workbook = WorkBook.Load("test.xlsx");
    WorkSheet sheet = workbook.WorkSheets.First();
    //Select cells easily in Excel notation and return the calculated value
    int cellValue = sheet["A2"].IntValue;
    // Read from Ranges of cells elegantly.
    foreach (var cell in sheet["A2:A10"])
    {
        Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
    }
    ///Advanced Operations
    //Calculate aggregate values such as Min, Max and Sum
    decimal sum = sheet["A2:A10"].Sum();
    //Linq compatible
    decimal max = sheet["A2:A10"].Max(c => c.DecimalValue);
    
    VB
    '''
    '''Read XLS or XLSX File
    '''anchor-read-an-xls-or-xlsx-file
    '''*
    Imports IronXL
    Imports System.Linq
    'Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
    Private workbook As WorkBook = WorkBook.Load("test.xlsx")
    Private sheet As WorkSheet = workbook.WorkSheets.First()
    'Select cells easily in Excel notation and return the calculated value
    Private cellValue As Integer = sheet("A2").IntValue
    ' Read from Ranges of cells elegantly.
    For Each cell In sheet("A2:A10")
        Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
    Next cell
    '''Advanced Operations
    'Calculate aggregate values such as Min, Max and Sum
    Dim sum As Decimal = sheet("A2:A10").Sum()
    'Linq compatible
    Dim max As Decimal = sheet("A2:A10").Max(Function(c) c.DecimalValue)
    

    ステップ1

    無料ダウンロードはこちら
    まず最初に必要なのは、Ironxl Excelライブラリをインストールすることです.NET Framework.
    Ironxl Excelをインストールするには、簡単に私たちのNuGetパッケージを使用して達成されますが、手動でインストールするように選択することもできますDLL プロジェクトまたはグローバルアセンブリキャッシュに.

    パッケージのインストール
  • Visual Studioでプロジェクトを選択します
  • Ironxl Excelパッケージのインストールとインストール

  • インストールするもう一つの方法は
  • パッケージマネージャーを入力します
  • type > installパッケージを作成します.エクセル
  • PM > Install-Package IronXL.Excel
    
    また、あなたはview the package on the NuGet site here

    インストールのダウンロード
    あるいは、我々はダウンロードして起動することができます.NET Excel DLL また、手動でVisual Studioにインストールします.

    チュートリアル

    2 .ワークブックを読み込む
    The WorkBook Excelシートを表します.Cを使ってExcelファイルを開くには、ワークブックを使用します.Excelファイル(. xlsx)のパスを読み込み、指定します.
    C
    /**
    Load WorkBook
    anchor-load-a-workbook
    **/
    var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
    
    VB
    '''
    '''Load WorkBook
    '''anchor-load-a-workbook
    '''*
    Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
    
    例: exceltodbprocessor
    各ワークブックに複数のWorkSheet オブジェクト.これらはExcelドキュメントのワークシートを表します.シートがワークシートを含んでいる場合、名前でそれらを取得するWorkBook.GetWorkSheet .
    C
    var worksheet = workbook.GetWorkSheet("GDPByCountry");
    
    VB
    Dim worksheet = workbook.GetWorkSheet("GDPByCountry")
    
    サンプル: exceltodb

    ワークブックを作成する
    メモリ内の新しいワークブックを作成するには、シートタイプの新しいブックを作成します.
    C
    /**
    Create WorkBook
    anchor-create-a-workbook
    **/
    var workbook = new WorkBook(ExcelFileFormat.XLSX);
    
    VB
    '''
    '''Create WorkBook
    '''anchor-create-a-workbook
    '''*
    Dim workbook As New WorkBook(ExcelFileFormat.XLSX)
    
    サンプル: apitoexcelprocessor
    注意: ExcelFileFormatを使用します.マイクロソフトExcelスプレッドシート(95とそれ以前)のための遺産のためのXLS.

    ワークシートの作成
    各“ブック”は、複数のワークシートを持つことができます.ワークシートは、ワークシートのコレクションを表します.これは、2つのワークシートを持つ1つのワークブックがExcelにどのように見えるかです.

    新しいワークシートコールを作成するにはWorkBook.CreateWorkSheet ワークシートの名前を渡します.
    C
    var worksheet = workbook.CreateWorkSheet("Countries");
    
    VB
    Dim worksheet = workbook.CreateWorkSheet("Countries")
    

    Getセル範囲
    “range”クラスは“セル”オブジェクトの2次元コレクションを表します.これはExcelセルのリテラル範囲を表します.ワークシートオブジェクトの文字列インデクサーを使用して範囲を取得します.
    引数テキストは、セルの座標(例えば“a 1”)または左から右へのセルのスパン(例えば「B 2 : E 5」)です.また、コールすることも可能ですGetRange ワークシートで.
    C
    var range = worksheet["D2:D101"];
    
    VB
    Dim range = worksheet("D2:D101")
    
    サンプル:データバリエーション

    6 .範囲内でセル値を編集する
    範囲内のセルの値を読み書きする方法はいくつかあります.カウントが既知の場合は、forループを使用します.
    C
    /**
    Edit Cell Values in Range
    anchor-edit-cell-values-within-a-range
    **/
    //Iterate through the rows
    for (var y = 2; y <= 101; y++)
    {
        var result = new PersonValidationResult { Row = y };
        results.Add(result);
        //Get all cells for the person
        var cells = worksheet[$"A{y}:E{y}"].ToList();
        //Validate the phone number (1 = B)
        var phoneNumber = cells[1].Value;
        result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
        //Validate the email address (3 = D)
        result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
        //Get the raw date in the format of Month Day[suffix], Year (4 = E)
        var rawDate = (string)cells[4].Value;
        result.DateErrorMessage = ValidateDate(rawDate);
    }
    
    VB
    '''
    '''Edit Cell Values in Range
    '''anchor-edit-cell-values-within-a-range
    '''*
    'Iterate through the rows
    For y = 2 To 101
        Dim result = New PersonValidationResult With {.Row = y}
        results.Add(result)
        'Get all cells for the person
        Dim cells = worksheet($"A{y}:E{y}").ToList()
        'Validate the phone number (1 = B)
        Dim phoneNumber = cells(1).Value
        result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
        'Validate the email address (3 = D)
        result.EmailErrorMessage = ValidateEmailAddress(CStr(cells(3).Value))
        'Get the raw date in the format of Month Day[suffix], Year (4 = E)
        Dim rawDate = CStr(cells(4).Value)
        result.DateErrorMessage = ValidateDate(rawDate)
    Next y
    
    サンプル:データバリエーション

    スプレッドシートデータの検証
    を使用してデータシートを検証します.DataValidationサンプルを使用しますlibphonenumber-csharp 電話番号を検証し、電子メールアドレスと日付を検証するために標準CチェックインAPIを使用します.
    C
    /**
    Validate Spreadsheet Data
    anchor-validate-spreadsheet-data
    **/
    //Iterate through the rows
    for (var i = 2; i <= 101; i++)
    {
        var result = new PersonValidationResult { Row = i };
        results.Add(result);
        //Get all cells for the person
        var cells = worksheet[$"A{i}:E{i}"].ToList();
        //Validate the phone number (1 = B)
        var phoneNumber = cells[1].Value;
        result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
        //Validate the email address (3 = D)
        result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
        //Get the raw date in the format of Month Day[suffix], Year (4 = E)
        var rawDate = (string)cells[4].Value;
        result.DateErrorMessage = ValidateDate(rawDate);
    }
    
    VB
    '''
    '''Validate Spreadsheet Data
    '''anchor-validate-spreadsheet-data
    '''*
    'Iterate through the rows
    For i = 2 To 101
        Dim result = New PersonValidationResult With {.Row = i}
        results.Add(result)
        'Get all cells for the person
        Dim cells = worksheet($"A{i}:E{i}").ToList()
        'Validate the phone number (1 = B)
        Dim phoneNumber = cells(1).Value
        result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
        'Validate the email address (3 = D)
        result.EmailErrorMessage = ValidateEmailAddress(CStr(cells(3).Value))
        'Get the raw date in the format of Month Day[suffix], Year (4 = E)
        Dim rawDate = CStr(cells(4).Value)
        result.DateErrorMessage = ValidateDate(rawDate)
    Next i
    
    上記のコードは、スプレッドシートの各行をループし、リストとしてセルをグラブします.Validateメソッドは、セルの値をチェックし、値が無効な場合はエラーメッセージを返します.
    このコードは新しいシートを作成し、ヘッダーを指定し、無効なデータのログがあるようにエラーメッセージの結果を出力します.
    C
    var resultsSheet = workbook.CreateWorkSheet("Results");
    resultsSheet["A1"].Value = "Row";
    resultsSheet["B1"].Value = "Valid";
    resultsSheet["C1"].Value = "Phone Error";
    resultsSheet["D1"].Value = "Email Error";
    resultsSheet["E1"].Value = "Date Error";
    for (var i = 0; i < results.Count; i++)
    {
        var result = results[i];
        resultsSheet[$"A{i + 2}"].Value = result.Row;
        resultsSheet[$"B{i + 2}"].Value = result.IsValid ? "Yes" : "No";
        resultsSheet[$"C{i + 2}"].Value = result.PhoneNumberErrorMessage;
        resultsSheet[$"D{i + 2}"].Value = result.EmailErrorMessage;
        resultsSheet[$"E{i + 2}"].Value = result.DateErrorMessage;
    }
    workbook.SaveAs(@"Spreadsheets\\PeopleValidated.xlsx");
    
    VB
    Dim resultsSheet = workbook.CreateWorkSheet("Results")
    resultsSheet("A1").Value = "Row"
    resultsSheet("B1").Value = "Valid"
    resultsSheet("C1").Value = "Phone Error"
    resultsSheet("D1").Value = "Email Error"
    resultsSheet("E1").Value = "Date Error"
    For i = 0 To results.Count - 1
        Dim result = results(i)
        resultsSheet($"A{i + 2}").Value = result.Row
        resultsSheet($"B{i + 2}").Value = If(result.IsValid, "Yes", "No")
        resultsSheet($"C{i + 2}").Value = result.PhoneNumberErrorMessage
        resultsSheet($"D{i + 2}").Value = result.EmailErrorMessage
        resultsSheet($"E{i + 2}").Value = result.DateErrorMessage
    Next i
    workbook.SaveAs("Spreadsheets\\PeopleValidated.xlsx")
    

    エンティティフレームワークを使用したデータのエクスポート
    データベースにデータをエクスポートするか、Excelスプレッドシートをデータベースに変換するには、Ironxlを使用してください.The ExcelToDB サンプルは国ごとにGDPでスプレッドシートを読み込み、そのデータをSQLiteにエクスポートします.
    EntityFrameworkを使用してデータベースを構築し、データラインをエクスポートします.
    SQLiteエンティティフレームワークnugetパッケージを追加します.

    EntityFrameworkを使用すると、データベースにデータをエクスポートできるモデルオブジェクトを作成できます.
    C
    public class Country
    {
        [Key]
        public Guid Key { get; set; }
        public string Name { get; set; }
        public decimal GDP { get; set; }
    }
    
    VB
    Public Class Country
        <Key>
        Public Property Key() As Guid
        Public Property Name() As String
        Public Property GDP() As Decimal
    End Class
    
    別のデータベースを使用するには、対応するnugetパッケージをインストールし、UseSqLite()C
    /**
    Export Data using Entity Framework
    anchor-export-data-using-entity-framework
    **/
    public class CountryContext : DbContext
    {
        public DbSet<Country> Countries { get; set; }
        public CountryContext()
        {
            //TODO: Make async
            Database.EnsureCreated();
        }
        /// <summary>
        /// Configure context to use Sqlite
        /// </summary>
        /// <param name="optionsBuilder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var connection = new SqliteConnection($"Data Source=Country.db");
            connection.Open();
            var command = connection.CreateCommand();
            //Create the database if it doesn't already exist
            command.CommandText = $"PRAGMA foreign_keys = ON;";
            command.ExecuteNonQuery();
            optionsBuilder.UseSqlite(connection);
            base.OnConfiguring(optionsBuilder);
        }
    }
    
    VB
    '''
    '''Export Data using Entity Framework
    '''anchor-export-data-using-entity-framework
    '''*
    Public Class CountryContext
        Inherits DbContext
        Public Property Countries() As DbSet(Of Country)
        Public Sub New()
            'TODO: Make async
            Database.EnsureCreated()
        End Sub
        ''' <summary>
        ''' Configure context to use Sqlite
        ''' </summary>
        ''' <param name="optionsBuilder"></param>
        Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder)
            Dim connection = New SqliteConnection($"Data Source=Country.db")
            connection.Open()
            Dim command = connection.CreateCommand()
            'Create the database if it doesn't already exist
            command.CommandText = $"PRAGMA foreign_keys = ON;"
            command.ExecuteNonQuery()
            optionsBuilder.UseSqlite(connection)
            MyBase.OnConfiguring(optionsBuilder)
        End Sub
    End Class
    
    クリエイトアCountryContext , 各レコードを作成する範囲を繰り返してからSaveAsync データをデータベースにコミットする
    C
    public async Task ProcessAsync()
    {
        //Get the first worksheet
        var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
        var worksheet = workbook.GetWorkSheet("GDPByCountry");
        //Create the database connection
        using (var countryContext = new CountryContext())
        {
            //Iterate through all the cells
            for (var i = 2; i <= 213; i++)
            {
                //Get the range from A-B
                var range = worksheet[$"A{i}:B{i}"].ToList();
                //Create a Country entity to be saved to the database
                var country = new Country
                {
                    Name = (string)range[0].Value,
                    GDP = (decimal)(double)range[1].Value
                };
                //Add the entity 
                await countryContext.Countries.AddAsync(country);
            }
            //Commit changes to the database
            await countryContext.SaveChangesAsync();
        }
    }
    
    VB
    Public Async Function ProcessAsync() As Task
        'Get the first worksheet
        Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
        Dim worksheet = workbook.GetWorkSheet("GDPByCountry")
        'Create the database connection
        Using countryContext As New CountryContext()
            'Iterate through all the cells
            For i = 2 To 213
                'Get the range from A-B
                Dim range = worksheet($"A{i}:B{i}").ToList()
                'Create a Country entity to be saved to the database
                Dim country As New Country With {
                    .Name = CStr(range(0).Value),
                    .GDP = CDec(CDbl(range(1).Value))
                }
                'Add the entity 
                Await countryContext.Countries.AddAsync(country)
            Next i
            'Commit changes to the database
            Await countryContext.SaveChangesAsync()
        End Using
    End Function
    
    サンプル: exceltodb

    スプレッドシートに数式を追加する
    式を設定するCell 'とのFormula プロパティ.
    以下のコードは、各状態を反復し、Cの割合を合計します.
    C
    /**
    Add Spreadsheet Formulae
    anchor-add-formulae-to-a-spreadsheet
    **/
    //Iterate through all rows with a value
    for (var y = 2; y < i; y++)
    {
        //Get the C cell
        var cell = sheet[$"C{y}"].First();
        //Set the formula for the Percentage of Total column
        cell.Formula = $"=B{y}/B{i}";
    }
    
    VB
    '''
    '''Add Spreadsheet Formulae
    '''anchor-add-formulae-to-a-spreadsheet
    '''*
    'Iterate through all rows with a value
    Dim y = 2
    Do While y < i
        'Get the C cell
        Dim cell = sheet($"C{y}").First()
        'Set the formula for the Percentage of Total column
        cell.Formula = $"=B{y}/B{i}"
        y += 1
    Loop
    
    サンプル

    10 . APIからスプレッドシートへデータをダウンロードする
    以下の呼び出しは、残りの呼び出しをRestClient.NET. JSONをダウンロードして、タイプの「リスト」にそれを変えますRestCountry . その後、各国を繰り返して、残りのAPIからExcelスプレッドシートにデータを保存するのは簡単です.
    C
    /**
    Data API to Spreadsheet
    anchor-download-data-from-an-api-to-spreadsheet
    **/
    var client = new Client(new Uri("https://restcountries.eu/rest/v2/"));
    List<RestCountry> countries = await client.GetAsync<List<RestCountry>>();
    
    VB
    '''
    '''Data API to Spreadsheet
    '''anchor-download-data-from-an-api-to-spreadsheet
    '''*
    Dim client As New Client(New Uri("https://restcountries.eu/rest/v2/"))
    Dim countries As List(Of RestCountry) = Await client.GetAsync(Of List(Of RestCountry))()
    
    サンプル: apitoExcel
    これはAPI JSONデータがどのように見えるかです.

    次のコードは国を反復し、スプレッドシートの名前、母集団、領域、数値コード、およびトップ3の言語を設定します.
    C
    for (var i = 2; i < countries.Count; i++)
    {
        var country = countries[i];
        //Set the basic values
        worksheet[$"A{i}"].Value = country.name;
        worksheet[$"B{i}"].Value = country.population;
        worksheet[$"G{i}"].Value = country.region;
        worksheet[$"H{i}"].Value = country.numericCode;
        //Iterate through languages
        for (var x = 0; x < 3; x++)
        {
            if (x > (country.languages.Count - 1)) break;
            var language = country.languages[x];
            //Get the letter for the column
            var columnLetter = GetColumnLetter(4 + x);
            //Set the language name
            worksheet[$"{columnLetter}{i}"].Value = language.name;
        }
    }
    
    VB
    For i = 2 To countries.Count - 1
        Dim country = countries(i)
        'Set the basic values
        worksheet($"A{i}").Value = country.name
        worksheet($"B{i}").Value = country.population
        worksheet($"G{i}").Value = country.region
        worksheet($"H{i}").Value = country.numericCode
        'Iterate through languages
        For x = 0 To 2
            If x > (country.languages.Count - 1) Then
                Exit For
            End If
            Dim language = country.languages(x)
            'Get the letter for the column
            Dim columnLetter = GetColumnLetter(4 + x)
            'Set the language name
            worksheet($"{columnLetter}{i}").Value = language.name
        Next x
    Next i
    

    オブジェクト参照とリソース
    また、あなたはIronXL class documentation 大きな価値のオブジェクトリファレンス内で.
    さらに、他のチュートリアルがあります.エクセル含むCreating, Opening, Writing, Editing, Saving, and Exporting Excel相互運用を使用しないXLS , XLSX , CSVファイル.

    概要
    東北大理Excelは一人です.スプレッドシートフォーマットの多種多様な読書のためのネットソフトウェアライブラリ.必要ないMicrosoft Excel インストールされ、相互運用に依存しない.

    11 .読んだExcelファイルC