Ответы пользователя по тегу Excel
  • Как извлечь данные из Excel (.xslx) файла в двухмерный массив (по столбцам)?

    @ERAFY Автор вопроса
    Сделал!
    Вернее нашел решения вот тут: stackoverflow.com и вот тут csharpcoderr.com и немного переделал.

    Нижеприведенный программный код (написанный на языке C#) считывает данные из указанного столбца таблицы Excel (целиком весь столбец сразу) и записывает в одномерный массив strArray. Тип данных, хранимых в результирующем одномерном массиве - string.

    //Создаём приложение.
            Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
            //Открываем книгу.                                                                                                                                                        
            Microsoft.Office.Interop.Excel.Workbook ObjWorkBook = ObjExcel.Workbooks.Open(pathToFile, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
            //Выбираем таблицу(лист).
            Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
            ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
    
            // Указываем номер столбца (таблицы Excel) из которого будут считываться данные.
            int numCol = 2;
        
            Range usedColumn = ObjWorkSheet.UsedRange.Columns[numCol];
            System.Array myvalues = (System.Array)usedColumn.Cells.Value2;
            string[] strArray = myvalues.OfType<object>().Select(o => o.ToString()).ToArray();
    
            // Выходим из программы Excel.
            ObjExcel.Quit();

    где:
    1) pathToFile - путь к Excel файлу.
    Можно указать нижеприведенным способом:
    string pathToFile = @"C:\Users\alexey\data.xlsx";

    2) numCol - номер столбца в таблице Excel из которого будет происходить чтение данных.

    Если нужно будет преобразовать все полученные элементы одномерного массива strArray из типа данных string к другому типу данных, к примеру double, то это можно сделать нижеприведенным кодом:
    // Преобразование всех элементов одномерного массива 
            // strArray из строкового типа в тип double.
            for (int i = 0; i < strArray.Length; i++)
                DataArray[i] = Convert.ToDouble(strArray[i]);
    Ответ написан
  • Как написать макрос в Excel, который строку данных из ячейки "рассортировывал" бы в таблицу?

    @ERAFY Автор вопроса
    Еще для реализации данной задачи я написал вот такой макрос:
    Он учитывает, что названия некоторых стран могут состоять из нескольких слов, к примеру "United Arab Emirates". Может кому пригодиться в будущем.
    Public Sub ConvertRowToTable()
    
        Dim textString As String
        Dim textArray() As String
         
        textString = ActiveCell.Text    'Получаем строку из активной (выдененной пользователем) ячейки
        textArray() = Split(textString) 'Разбиение строки на подстроки, которые будут храниться в элементах массива.
                                        'Разбиение осуществлялось через пробелы
    
    
    
        'Цикл объединения элементов массива, слов, разделенных ранее пробелами (дело в том, что функция Split, слова,...
        '...разделенные пробелами, разносит в разные элементы массива, и эти слова необходимо объединять в один элемент массива
        m = 0
        For i = LBound(textArray) To UBound(textArray)
          
            If i = 0 Then
                i = 1
            End If
            
            Check1 = textArray(i - 1) Like "*[a-z]*" 'Проверка наличия буквенных символов в предыдущей строке элемента массива
            Check2 = textArray(i) Like "*[a-z]*"     'Проверка наличия буквенных символов в текущей строке элемента массива
          
          
            If Check1 And Check2 Then                'Если в строках предыдущего и текущего элементах массива содержиться буквенный текст, то...
                       
               textArray(i - 1) = textArray(i - 1) & " " & textArray(i) '...конкатенируем строки текущего и предыдудщего элементов массива
               
               m = m + 1
               
               For n = i To UBound(textArray) - m    'Цикл осуществляющий сдвиг всех элементов массива на m
            
                    textArray(n) = textArray(n + 1)
                     
               Next n
                
            textArray(n) = ""  'Обнуляем строки последних ненужных элементов массива
               
            i = i - 1  'Осуществляет возврат цикла назад, для повторной проверки одновременного наличия буквенных символов в строке,...
                       '...уже нового предыдущего элемента массива и текущего элемента массива
                        
            End If
                   
        Next i
    
    
    
        'Цикл формирования таблицы из массива данных
        j = 0
        n = ActiveCell.Column  'Возвращает номер стобца активной ячейки
        k = ActiveCell.Row + 1 'Возвращает номер строки активной ячейки и + 1
        For i = LBound(textArray) To UBound(textArray)
        
            If j >= 3 Then 'Если j >= 3, то переходим на новую строку и возвращаемся на изначальный столбец
                j = 0      'возвращение на изначальный столбец
                k = k + 1  'переход на новую строку
            End If
    
            textArray(i) = Replace(textArray(i), "(", "") 'Убираем ненужные скобки
            textArray(i) = Replace(textArray(i), ")", "") 'Убираем ненужные скобки
            
            Sheets(1).Cells(k, j + n) = textArray(i)
                    
            j = j + 1
            
        Next i
    
    
    
    End Sub
    Ответ написан
    Комментировать