Member 13414500 Ответов: 1

Слияние документов excel WPF C#


Я пытаюсь создать простую программу для объединения файлов excel и испытываю проблемы с загрузкой файлов в список по отдельности.

Пользователь может выбрать несколько файлов, которые появляются в списке, а затем при нажатии кнопки слияния создается новый файл с именем, указанным в текстовом поле сбоку.

Моя проблема заключается в том, когда я прихожу, чтобы загрузить файлы для слияния из списка.
btnMergeFile_Click(object sender, RoutedEventArgs e)
{
    Workbook workbook = new Workbook();
    workbook.LoadFromFile(@"filename.xlsx");
    Workbook workbook2 = new Workbook();
    workbook2.LoadFromFile(@"filename.xlsx");
}

Можно ли называть имена списков по отдельности?

Извините, что я новичок в c# и wpf.

Вот буквально весь код!

код XAML
<DockPanel Margin="10">
    <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
        Select Files
        Merge Files
        Clear Files
        <TextBox x:Name="newFileName" TextAlignment="Left" HorizontalAlignment="Center" Width="150" Text="New File Name"/>
    
    <ListBox x:Name="listBox1" />
</DockPanel>

.ЦЕЗИЙ
using System;
using System.Windows;
using Microsoft.Win32;
using System.Data;
using Spire.Xls;

namespace ExcelMerge_1._1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        public void btnSelectFile_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Multiselect = true;
            openFileDialog.Filter = "csv files (*.csv)|*.csv|Excel files (*.XLSX)|*.XLSX";
            openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            if (openFileDialog.ShowDialog() == true)
            {
                foreach (string filename in openFileDialog.FileNames)

                    listBox1.Items.Add(System.IO.Path.GetFullPath(filename));
            }

        }

        public void btnMergeFile_Click(object sender, RoutedEventArgs e)
        {
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(@"filename.xlsx");
            Workbook workbook2 = new Workbook();
            workbook2.LoadFromFile(@"filename.xlsx");


            Worksheet sheet2 = workbook2.Worksheets[0];
            DataTable dataTable = sheet2.ExportDataTable();
            Worksheet sheet1 = workbook.Worksheets[0];
            sheet1.InsertDataTable(dataTable, false, sheet1.LastRow + 1, 1);

            workbook.SaveAsXml(newFileName.Text);
        }

        private void btnClearFile_Click(object sender, RoutedEventArgs e)
        {
            listBox1.Items.Clear();
        }
    }
}


Что я уже пробовал:

Сначала попробовал интерлоп и не смог заставить его работать, поэтому решил попробовать шпиль, выглядит многообещающе, однако это простое препятствие меня заводит!

Graeme_Grant

В чем именно заключается Ваш вопрос?

1 Ответов

Рейтинг:
0

Graeme_Grant

Можно ли называть имена списков по отдельности? Да. Вот более простой способ сделать это:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }

    public ObservableCollection<XlFile> XlFiles { get; }
        = new ObservableCollection<XlFile>();

	public void btnSelectFile_Click(object sender, RoutedEventArgs e)
	{
		OpenFileDialog openFileDialog = new OpenFileDialog();
		openFileDialog.Multiselect = true;
		openFileDialog.Filter = 
                    "csv files (*.csv)|*.csv|Excel files (*.XLSX)|*.XLSX";
		openFileDialog.InitialDirectory =
                    Environment.GetFolderPath(
                        Environment.SpecialFolder.MyDocuments);

		if (openFileDialog.ShowDialog() == true)
		{
			foreach (string filename in openFileDialog.FileNames)

            XlFiles.Add(new XlFile
            {
                Name = System.IO.Path.GetFileName(filename),
                FullPath = filename
            });
		}

	}

    public void btnMergeFile_Click(object sender, RoutedEventArgs e)
    {
        foreach (var xlFile in XlFiles)
        {
            // do work here...
        }
    }
}

public class XlFile
{
    public string Name { get; set; }
    public string FullPath { get; set; }
}

И Xaml для списка:
<ListBox ItemsSource="{Binding XlFiles}" DisplayMemberPath="Name"/>