Другой взгляд на перенос строк данных Excel в массив (отредактировано) - PullRequest
0 голосов
/ 17 мая 2018

Для пояснения я пытаюсь перенести каждую целую строку Excel в список.В случае упрощенного примера я пытаюсь перевести первую строку в массив строк.

Я проработал несколько сообщений на тему преобразования каждой строки таблицы Excel и переноса каждой строки вСписок, включая этот пост

Несмотря на то, что я играю с примерами, я все равно получаю ошибку конвертации.Я сузил свою программу до простого примера, просто разгрузив первую строку, которая содержит заголовки столбцов, в строковый массив, и я получаю сообщение об ошибке, в котором говорится, что не удается преобразовать общий список в строку [].

Я могу напечатать первую строку, используя Console.Write(String.Format(dataRange.Value2.ToString() + " "), но не могу сохранить первую строку.

Вот упрощенная программа, которая выдает ошибку:

static void Main(string[] args)
{
  string [] m_column_headings;
  Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook wbv = excel.Workbooks.Open("H:\\my_documents\\testFile.xlsx");
Microsoft.Office.Interop.Excel.Worksheet wx = excel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

Range dataRange = (Range)wx.Cells[1, 1];
m_column_headings = dataRange.Cast<object>().Select(o => o.ToString()).ToList(); <--- This line gets the error.

На основев ответ я внес следующие изменения, чтобы сохранить правильность типов, но не могу увидеть, что я назначил.

dataRange = (Range)wx.Cells[1, 1];
m_column_headings = 
  dataRange.Cast<object>().Select(o => o.ToString()).ToArray();

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я ценю ответ и комментарии. Они помогли мне разобраться, что пошло не так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;

namespace ExcelTest1
{
    class Program
    {
        static void Main(string[] args)
        {
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wbv = excel.Workbooks.Open("H:\\my_documents\\town\\personnel\\May 18 MuniRosterDetailReport.xlsx");
            Microsoft.Office.Interop.Excel.Worksheet wx = excel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
            Range dataRange = null;
            int totalColumns = wx.UsedRange.Columns.Count;
            int totalRows = wx.UsedRange.Rows.Count;
                List<string> m_column_headings = new List<string>();
                dataRange = (Range)wx.UsedRange;

                int row = 1;
                for(int colIdx = 1; colIdx < (totalColumns + 1); colIdx++)
                {
                    Range tempRange = (Range )wx.Cells[row, colIdx];
                    m_column_headings.Add(String.Format(tempRange.Value2.ToString() + ","));
                }


                int i = 0;
            wbv.Close(true, Type.Missing, Type.Missing);
            excel.Quit();
        }
    }
}
0 голосов
/ 17 мая 2018

Вы пытаетесь получить string Array, но затем запрашиваете код для возврата .ToList().Либо преобразуйте m_column_headings в список, либо измените тип возвращаемого значения на .ToArray()

т.е. m_column_headings = dataRange.Cast<object>().Select(o => o.ToString()).ToArray();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...