WPF MVVM JSON Operations (Convert Excel To Json)

 

WPF MVVM JSON Operations (Convert Excel To Json)

 

Folder: View - > MainWindow.xaml

<Window x:Class="WpfExceltoJson.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfExceltoJson"

        xmlns:vm="clr-namespace:WpfExceltoJson.ViewModel"

        mc:Ignorable="d"

        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>

        <vm:ExcelToJson x:Key="ViewModel"/>

    </Window.Resources>

    <Grid DataContext="{Binding Source={StaticResource ViewModel}}">

        <Button x:Name="Submit" Height="50" Content="Conver Excel To Json " Background="Aqua" Command="{Binding ConvertExcelToJson }" Margin="208,134,168,135"/>

    </Grid>

</Window>

 

Folder: Model - > Empty

Nothing Empty

 

Folder: ViewModel - > ExcelToJson.cs

public class ExcelToJson

    {

        private ICommand _ConvertExcelToJson;

 

        public ICommand ConvertExcelToJson

        {

            get

            {

                if (_ConvertExcelToJson == null)

                {

                    _ConvertExcelToJson = new RelayCommand(Param => this.ConverFile(), null);

                }

                return _ConvertExcelToJson;

            }

        }

 

        public void ConverFile()

        {

            var pathToExcel = @"C:\temp\file.xlsx";

            var sheetName = "sheetOne";

 

            //This connection string works if you have Office 2007+ 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 row).Select(x =>

                         {

 

 

                             //dynamic item = new ExpandoObject();

                             Dictionary<string, object> item = new Dictionary<string, object>();

                             item.Add(rdr.GetName(0), x[0]);

                             item.Add(rdr.GetName(1), x[1]);

                             item.Add(rdr.GetName(2), x[2]);

                             return item;

 

                         });

 

                    //Generates JSON from the LINQ query

                    var json = JsonConvert.SerializeObject(query, Formatting.Indented);

 

                    File.WriteAllText(@"C:\temp\new.json", json);

                    //return json;

                }

            }

        }

    }

 

    }Folder: ICommandUpdater- > RelayCommand.cs

public class RelayCommand:ICommand

    {

        public RelayCommand(Action<object> execute) : this(execute, null)

        {    }

 

    public RelayCommand(Action<object> execute, Predicate<object> canExecute)

    {

        if (execute == null)

            throw new ArgumentNullException("execute");

        _execute = execute;

        _canExecute = canExecute;

    }

    public bool CanExecute(object parameter)

    {

        return _canExecute == null ? true : _canExecute(parameter);

    }

    public event EventHandler CanExecuteChanged

    {

        add { CommandManager.RequerySuggested += value; }

        remove { CommandManager.RequerySuggested -= value; }

    }

    public void Execute(object parameter)

    {

        _execute(parameter);

    }

    private readonly Action<object> _execute;

    private readonly Predicate<object> _canExecute;

}

Project Input/Output File Path:

C:\temp\file.xlsx

 

Comments

Popular posts from this blog

Simple WPF MVVM Application with Unit Testing.

WPF MVVM JSON Operations (Part - I : Read Json File Data to List and Show on Xmal using DataGrid )