Здравствуйте, товарищи! Бью к вам челом! Вопрос к тем, кто программировал/программирует Excel в C# (.NET Framework).
В общем, проблема такого характера. Имеется некий диапазон. Фильтрую его. Мне нужно получить этот отфильтрованный диапазон и пихнуть его в массив. В VBA я делаю так:
Это в VBA. А вот аналогичный метод в C#:
Как видно, диапазон, полученный через SpecialCells, даёт нам String, а не массив. Кто-нибудь знает, как решить эту проблему?
В общем, проблема такого характера. Имеется некий диапазон. Фильтрую его. Мне нужно получить этот отфильтрованный диапазон и пихнуть его в массив. В VBA я делаю так:
Код |
---|
Sub F1() Dim rng As Range, arr As Variant Set rng = Sheets(1).Range("AS5:AS6094").SpecialCells(xlCellTypeVisible) arr = rng.Value End Sub" |
Код |
---|
using Excel = Microsoft.Office.Interop.Excel; ...... private void LoadExcelFile() { // Выбираем файл и открываем его var dialog = new Microsoft.Win32.OpenFileDialog { InitialDirectory = Directory.GetCurrentDirectory() }; if (!dialog.ShowDialog(this).Value) return; var excelFile = dialog.FileName; Excel.Application xlApp = new Excel.Application() { Visible = true }; Excel.Workbook book = xlApp.Workbooks.Open(excelFile); Excel.Worksheet sheet = book.Sheets[1]; // Убираем автофильтр if (sheet.AutoFilter != null) sheet.AutoFilterMode = false; // Фильтруем sheet.Range["A5:BA5"].AutoFilter(Field: 25, Criteria1: "31.07.2014"); // Получаем фильтрованный диапазон var rng1 = sheet.Range["AS5", "AS6094"].SpecialCells(Excel.XlCellType.xlCellTypeVisible); // Получаем весь диапазон var rng2 = sheet.Range["AS5", "AS6094"]; // Значение диапазона (ожидаем массив) dynamic val1 = rng1.Value; dynamic val2 = rng2.Value; MessageBox.Show(val1.GetType().Name); // Возвращает: String <= Ожидался массив Object[,] MessageBox.Show(val2.GetType().Name); // Возвращает: Object[,] <= Правильно book.Close(); xlApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(book); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); } |
There is no knowledge that is not power