public Excel_Table CopyRows(string Filters = "*", int Colomn = 0, int Head = 0, string FileName = "") { string[] FilterList = Filters.Split(';'); // Разделяем фильтры FilterList = RemoveDouble(FilterList); // Удалим повторы // Настройка прогрессбара Progress.Current.Position = 0; Progress.Current.Maximum = Table_Height; Progress.Process = "Поиск совпадений по файлу «" + Path.GetFileName(FileName) + "»"; // Создаём список копируемых строк List <int> RowsCopy = new List <int>(); // Копируем все заголовочные строки for (int i = 0; i < Head; i++) { RowsCopy.Add(i); Progress.Current.Position++; if (Progress.Abort) { return(null); } } // Ищем совпадения по всем ячейкам foreach (string Filter in FilterList) { for (int i = 0; i < Table_Height; i++) { Progress.Current.Position++; for (int j = 0; j < Table_Width; j++) { // Если находим или если фильтр *, то помечаем строку как готовую к копированию и выходим. if ((list[j, i] == Filter) || (Filter == "*")) { RowsCopy.Add(i); break; } } } } //Создаём новую таблицу Excel_Table FilteredTable = new Excel_Table(Table_Width, RowsCopy.Count); // и скопируем все подходящие данные в новую таблицу for (int i = 0; i < RowsCopy.Count; i++) { for (int j = 0; j < Table_Width; j++) { FilteredTable.list[j, i] = list[j, RowsCopy[i]]; } if (Progress.Abort) { return(null); } } return(FilteredTable); }
public static Excel_Table LoadFromFile(string FileName) { //Открываем файл Экселя //Создаём приложение. Excel.Application ObjExcel = new Excel.Application(); //Открываем книгу. Excel.Workbook ObjWorkBook = ObjExcel.Workbooks.Open(FileName, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); //Выбираем таблицу(лист). Excel.Worksheet ObjWorkSheet; ObjWorkSheet = (Excel.Worksheet)ObjWorkBook.Sheets[1]; var lastCell = ObjWorkSheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell);// Находим последнюю ячейку. // Создаём новый Excel_Table объект Excel_Table ET = new Excel_Table(lastCell.Column, lastCell.Row); // Настройка прогрессбара Progress.Current.Position = 0; Progress.Current.Maximum = ET.Table_Width * ET.Table_Height + 2 * ET.Table_Height; Progress.Process = "Считывание данных из файла «" + Path.GetFileName(FileName) + "»"; for (int i = 0; i < ET.Table_Width; i++) //по всем колонкам { for (int j = 0; j < ET.Table_Height; j++) // по всем строкам { ET.list[i, j] = ObjWorkSheet.Cells[j + 1, i + 1].Text.ToString(); //считываем текст в строку Progress.Current.Position++; Application.DoEvents(); if (Progress.Abort) { ObjWorkBook.Close(false, Type.Missing, Type.Missing); //закрыть не сохраняя //Удаляем приложение (выходим из экселя) - а то будет висеть в процессах! ObjExcel.Quit(); return(ET); } } } ObjWorkBook.Close(false, Type.Missing, Type.Missing); //закрыть не сохраняя //Удаляем приложение (выходим из экселя) - а то будет висеть в процессах! ObjExcel.Quit(); Progress.Current.Done = ET.Table_Width * ET.Table_Height; return(ET); }
private void button1_Click(object sender, EventArgs e) { button1.Enabled = false; button4.Enabled = false; // Получаем данные о файлах string FileToOpen = Files_Directories.OpenFile("Открыть файл с исходными данными", "Файлы Excel (*.xlsx, *.xls)|*.xlsx;*.xls|Все файлы (*.*)|*.*"); if (FileToOpen == null) { return; } string[] Filters = Files_Directories.OpenFiles("Открыть файлы с масками данных", "Файлы Excel (*.xlsx, *.xls)|*.xlsx;*.xls|Все файлы (*.*)|*.*"); if (Filters == null) { return; } string OutDir = Files_Directories.OpenDirectory(); if (OutDir == null) { return; } // Настройка ProgressBar Progress.Abort = false; Progress.All.Position = 0; Progress.All.Maximum = 1 + Filters.Count() + Filters.Count(); Progress.Counting = true; // Загружаем файлы в RAM Excel_Table Data = Excel_Table.LoadFromFile(FileToOpen); if (Progress.Abort) { return; } Progress.All.Position++; List <Excel_Table> FilterTables = new List <Excel_Table>(); for (int i = 0; i < Filters.Count(); i++) { FilterTables.Add(Excel_Table.LoadFromFile(Filters[i])); if (Progress.Abort) { return; } Progress.All.Position++; } // Обработка фильтров for (int i = 0; i < Filters.Count(); i++) { // Формируем список фильтров string FilterList = ""; for (int j = 0; j < FilterTables[i].Table_Height; j++) { FilterList += FilterTables[i].list[0, j] + ";"; } if (Progress.Abort) { return; } Excel_Table Res = Data.CopyRows(FilterList, config.Colomn, config.HeadRows); if (Progress.Abort) { return; } Res.SaveToFile(OutDir + @"\" + Path.GetFileNameWithoutExtension(Filters[i]) + "_OUT.xlsx"); Progress.All.Position++; } Progress.Counting = false; MessageBox.Show("Задание выполнено"); button1.Enabled = true; button4.Enabled = true; }