Member 13305578 Ответов: 2

Почему я не могу открыть файл excel в C#?


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

и вот что я получаю :
Необработанное исключение типа "System.NullReferenceException" произошло в myproject.exe

Дополнительная информация: ссылка на объект не установлена на экземпляр объекта.

точка входа процедуры ucrtbase. terminate не может быть расположена в библиотеке динамических ссылок api-ms-win-crt-runtime-/1-1-0.dll.

+ $exception {System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
в моем проекте.Form1.btnopen_Click(отправитель объекта, EventArgs e) in c:\Users\toshiba\Documents\Visual Studio 2012\Projects\myproject\myproject\Form1.cs: строка 33
в системе.Окна.Формы.Контроль.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnMouseUp(MouseEventArgs mevent)
в системе.Окна.Формы.Контроль.WmMouseUp(Message& m, кнопка MouseButtons, Int32 клика)
в системе.Окна.Формы.Контроль.WndProc (Message& m)
в системе.Окна.Формы.ButtonBase.WndProc (Message& m)
в системе.Окна.Формы.Кнопка.WndProc (Message& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.WndProc (Message& m)
в системе.Окна.Формы.Родное окно.DebuggableCallback(hwnd элемента указателя IntPtr, int32 и глутамат натрия, указателя IntPtr параметр wparam, указателя IntPtr lparam должен)
в системе.Окна.Формы.Небезопасные методы.DispatchMessageW(MSG& msg)
в системе.Окна.Формы.Приложение.ComponentManager.Система.Окна.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop(dwComponentID типа int32, int32 и причина, типа int32 pvLoopData)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoopInner(типа int32 причина, ApplicationContext контексте)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoop(типа int32 причина, ApplicationContext контексте)
в моем проекте.Program. Main () in c:\Users\toshiba\Documents\Visual Studio 2012\Projects\myproject\myproject\Program. cs: строка 17
в системе.Домен приложений._nExecuteAssembly(монтаж, string[] аргументы)
в корпорации Microsoft.VisualStudio.Хостингпроцесс.HostProc.RunUsersAssembly()
в системе.Нарезание резьбы.ExecutionContext. Run(ExecutionContext executionContext, ContextCallback callback, состояние объекта)
в системе.Нарезание резьбы.ThreadHelper.ThreadStart()} Система.Исключение {System. NullReferenceException}
+ ofd {система.Окна.Формы.OpenFileDialog: Название:, Имя Файла: C:\Users\toshiba\Documents\PRODUCT.xlsx} Система.Окна.Формы.Диалоговое окно openfiledialog

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

using Excel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace myproject
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        DataSet result;

        private void btnopen_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog opfd = new OpenFileDialog() { Filter = "Excel Workbook|*.xlsx", ValidateNames = true })
            {
                if (opfd.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = File.Open(opfd.FileName, FileMode.Open, FileAccess.Read);
                    IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(fs);
                    reader.IsFirstRowAsColumnNames = true;
                    result = reader.AsDataSet();
                    Sheetname.Items.Clear();
                    foreach (DataTable dt in result.Tables)
                        Sheetname.Items.Add(dt.TableName);
                    reader.Close();
                }
            }
        }

        private void Sheetname_SelectedIndexChanged(object sender, EventArgs e)
        {
            dataview.DataSource = result.Tables[Sheetname.SelectedIndex];
        }
    }
}

2 Ответов

Рейтинг:
2

OriginalGriff

Начните с использования отладчика, чтобы точно определить, где находится проблема:
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Проблема, вероятно, связана с тем, что ваша файловая система или ваше приложение уже открыли файл, но без сообщения об ошибке и точной строки, на которой он появляется, мы даже не можем догадаться, что его вылечит! Поэтому используйте отладчик, проверьте все содержимое переменных и посмотрите, что вы можете найти.
Если вы не можете определить проблему из этого, то вернитесь к нам с фактической информацией, и мы посмотрим, что мы можем сделать - но у нас нет доступа к вашей файловой системе, и вам нужно, чтобы ваше приложение работало, чтобы найти проблему.


Member 13305578

теперь ответ :)

Рейтинг:
0

Richard MacCutchan

Вы используете неправильный тип считывателя: Использование IExcelDataReader[^].


Member 13305578

с TQ! я решил эту проблему :)