Могу ли я читать файл Excel по столбцам в c #?

#c# #excel #text

#c# #excel #текст

Вопрос:

могу ли я читать файл Excel по столбцам по столбцам? Я хотел бы прочитать первый столбец файла xlsx, и когда я доберусь до пустой ячейки, я загружу другой столбец.Я пробовал то, что есть в коде, но это, вероятно, полная бессмыслица. В моем коде есть три ошибки: Ошибка CS0161 ‘Class1.ReadCell (int, int)’: не все пути кода возвращают значение

Возможно, объяснения достаточно.

Я попробовал это:

Form1:

 using System;
using System.IO;
using System.Windows.Forms;


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

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFile();
        }

        public void OpenFile()
        {
            Class1 excel = new Class1(textBox1.Text,1) ;
            string path = textBox1.Text ".txt";
            TextWriter tw = new StreamWriter(path, true);

           tw.Write(excel.ReadCell(0, 0));
           tw.Close();
        }

        
    }
    }
 

Class1:

 using Microsoft.Office.Interop.Excel;
using _Excel = Microsoft.Office.Interop.Excel;

namespace WindowsFormsApp2
{
    class Class1
    {
        string path = "";
        _Application excel = new _Excel.Application();
        Workbook wb;
        Worksheet ws;
        private object excelWorksheet;

        public Class1(string path, int Sheet)
        {
            this.path = path;
            wb = excel.Workbooks.Open(path);
            ws = (Worksheet)wb.Worksheets[Sheet];
        }
        public string ReadCell(int i, int j)
        {
            for ( i = 0; i < 20; i  )
            {
                for ( j = 1; j < 100; j  )
                {
                    int first = 65   i;
                    string coordinates = ((char)first).ToString()   j;

                    if (ws.Range[coordinates].Value == "Z_KomSilnice_L (24200)/7 ")
                    {
                        return ws.Range[coordinates].Value;
                    }
                    else
                        return "";
                }
            }
        }
    }
}
 

Комментарии:

1. Ваши два return[i, j]; , вероятно, должны быть return ws.Cells[i,j] похожи на ваш третий пример.

2. Однако вы не можете просто возвращать ячейки: если вам нужны строки, вам нужно будет возвращать значение при вычислении в строке CellValue. Также есть . ValueType (я думаю), что, вероятно, лучший способ проверить, пуста ячейка или нет.

3. Взаимодействие не является хорошим выбором, если вы просто хотите работать с файлами — это неудобно, иногда ненадежно, а также требует, чтобы на компьютере, на котором выполняется код, были установлены соответствующие зависимости Excel. Вместо этого существует множество (бесплатных) библиотек, которые могут напрямую взаимодействовать с форматом файла, не полагаясь на компоненты приложения Excel. например, ClosedXML, NPOI и другие. Ваша задача, вероятно, была бы проще, используя вместо этого эти библиотеки.

4. @Rup могу я спросить, как я могу этого добиться?

5. @ADyson есть какие-нибудь советы для полного новичка?