IZennoTable Table_Big = project.Tables["Table_Big"];
Table_Big.ColSeparator = "Ћ";
IZennoTable Table1 = project.Tables["Table1"];
Table1.ColSeparator = "Ћ";
List<string> List_2 = new List<string>();
int Stolbec_Nomer = 3;
List<string> List_3 = new List<string>();
string cell_old = "блаблабла любое уникальное значение !!! пщь!!";
string cell_new = "";
int Dele_ON = 0;
var List = project.Lists["Файлы"];
string supportedExtensions = "*.xlsx,.xls";
foreach (string File in Directory.GetFiles(project.Directory+"\\Папка_с_файлами", "*.*", SearchOption.AllDirectories).Where(s => supportedExtensions.Contains(Path.GetExtension(s).ToLower()) && !s.Contains("~$") ))
{
List.Add(File);
}
project.SendInfoToLog(List.Count + " шт. файлов нашли под обработку, быстрая версия шаблона с пересортировкой...", true);
project.SendInfoToLog("клеим таблицу каждого файла в одну большую виртуальную таблицу Table_Big (в памяти, без прявязки к файлу)", true);
for (int i=0; i<List.Count(); i++)
{
Table1.Bind(List[i]);
int Table1_ColCount = Table1.ColCount;
for (int c=0; c<Table1.RowCount; c++)
{
if (Table1.GetRow(c).Count() == Table1_ColCount)
{
string stroka = String.Join("Ћ", Table1.GetRow(c)) + "Ћ" + List[i];
Table_Big.AddRow(stroka);
}
}
}
List<string> tmpList = new List<string>();
Enumerable.Range(0, Table_Big.RowCount).ToList().ForEach(x => tmpList.Add(string.Join("Ћ", Table_Big.GetRow(x))));
tmpList = tmpList.OrderBy(s => s.Split('Ћ')[Stolbec_Nomer].Length).ThenBy(s => s.Split('Ћ')[Stolbec_Nomer]).ToList();
Table_Big.Clear();
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => Table_Big.AddRow(tmpList[x]));
project.SendInfoToLog(Table_Big.RowCount + " шт. строк в таблице Table_Big, чистим дубли...", true);
for (int d=0; d<Table_Big.RowCount; d++)
{
cell_new = Table_Big.GetCell(Stolbec_Nomer, d);
if (cell_new == cell_old && cell_new!="-")
{
Table_Big.DeleteRow(d);
Dele_ON = 1;
d--;
}
else
{
if (Dele_ON == 1)
{
Table_Big.DeleteRow(d-1);
d--;
}
Dele_ON = 0;
}
cell_old = cell_new;
}
project.SendInfoToLog(Table_Big.RowCount + " шт. строк в таблице Table_Big после чистки дублей, теперь бы как-то собрать обратно строки с большой таблицы в мелкие (по метке в последнем столбце)...", true);
for (int i=0; i<List.Count(); i++)
{
Table1.Bind(List[i]);
Table1.Clear();
Table1.ColSeparator = "Ћ";
int Col_Last_Number = Table_Big.ColCount - 1;
for (int c=0; c<Table_Big.RowCount; c++)
{
string cell_Metka = Table_Big.GetCell(Col_Last_Number, c);
if (cell_Metka==List[i])
{
List_3.Clear();
List_3.AddRange(Table_Big.GetRow(c));
List_3.RemoveAt(Col_Last_Number);
string row_new = String.Join("Ћ", List_3);
Table1.AddRow(row_new);
}
}
}