@kititnik1

Как импортировать таблицу Excel в C#?

У меня естьТаблица Excel и есть вот такая простентькая программа
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Questions[] q;


        }
    }
    class Questions
    {
        public string question;
        public string theme;
        public string description;
        public string questionEn;
        public string descrEn;
    }
}

Как мне например все данные из столбика A переносить в переменную question, B - theme, C - description?
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
FoggyFinder
@FoggyFinder
Существует множество библиотек для работы с Excel. Что из них выбрать зависит от задачи (например, нужно только читать данные или нужно формировать полноценный отчет, со стилями и так далее).

Судя по описанию, здесь вам нужно только чтение, причем с поддержкой устаревшего формата xls, поэтому рекомендую библиотеку ExcelDataReader

Если у вас .Net Core приложение не забудьте добавить строку

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);


А теперь пример.

1. В C# не принято для классов использовать публичные поля, поэтому перепишем их на свойства

public class Questions
{
    public string Question { get; set; }
    public string Theme { get; set; }
    public string Description { get; set; }
    public string QuestionEn { get; set; }
    public string DescrEn { get; set; }
}


2. Само чтение

const string FilePath = "sample.xls";
var qs = new List<Questions>();

using var stream = File.Open(FilePath, FileMode.Open, FileAccess.Read);
using var reader = ExcelReaderFactory.CreateReader(stream);
do
{
    while (reader.Read())
    {
        var question = reader.GetString(0);
        var theme = reader.GetString(1);
        var description = reader.GetString(2);

        qs.Add(new Questions()
        {
            Question = question,
            Theme = theme,
            Description = description
        });
    }
} while (reader.NextResult());


3. Выводим результат

foreach(var q in qs)
{
    Console.WriteLine($"{q.Question}");
    Console.WriteLine($"{q.Theme}");
    Console.WriteLine($"{q.Description}");
    Console.WriteLine(new string('-', Console.WindowWidth));
}


4. Запускаем, проверяем

Индейцы в знак примирения хлопали в ладоши
history
Они закапывали топор войны
----------------------------------------------------------------------------------------------------
Моряки пропитывали свою одежду смолой, чтобы она не рвалась
history
Чтобы она не пропускала воду
----------------------------------------------------------------------------------------------------
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы