Считать кириллицу из .xlsm в C#

Изначально моя программа принимала на вход CSV файл сохранённый в Unicode и нормально считывала с него данные, но пришлось перейти на Excel и вот тут я столкнулся с проблемой отображения содержимого файла .xlsx Что я делал:

Encoding win1251 = Encoding.GetEncoding("windows-1251");
string whole_file = File.ReadAllText(OpenCSVFile(), Encoding.GetEncoding(1251));
  • Поигрался с предложенными кодировками, Unicode, UTF-8, но результат один и тот же, отображаются некорректные символы.
  • На одном форуме нашёл Encoding.Default(), но это решение не помогло

Данные выглядят следующим образом: введите сюда описание изображения

Понимаю, что проблема в кодировке, но решить проблему не удалось. Буду рад услышать советы и рекомендации.

Программа отлично работала с CSV, но к сожалению часто CSV файлы "ломаются",съезжают строки

введите сюда описание изображения

Сслылка на файл из примера https://wdho.ru/in0i/ex2007only_data&break.xlsx


Ответы (1 шт):

Автор решения: Bulson

Я использовал EPPlus 5. Ставим пакет пакет

Код в форме такой

public partial class FormMain : Form
{
    public FormMain()
    {
        InitializeComponent();
        this._buttonOpen.Click += ButtonOpen_Click;
    }

    private void ButtonOpen_Click(object sender, EventArgs e)
    {
        if (_openFileDialog.ShowDialog() != DialogResult.OK)
            return;

        var stringBuilder = new StringBuilder();

        ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
        using (var package = new ExcelPackage(new FileInfo(_openFileDialog.FileName)))
        {
            var page = package.Workbook.Worksheets["Page1"];
            for (int row = 1; row <= page.Dimension.End.Row; row++)
            {
                for (int col = 1; col <= page.Dimension.End.Column; col++)
                {
                    stringBuilder.AppendLine($"Строка: {row}, столбец: {col}," +
                        $" {page.Cells[row, col].Value?.ToString().Trim()}");
                }
            }
        }

        _textBoxOutput.Text = stringBuilder.ToString();
    }
}

Работает это так пример работы

→ Ссылка