dosperados
19-02-2019, 08:46
Добрый день. Прошу помощи знатоков.
Необходимо транспонировать таблицу из строки в столбик при чем необходимо отбросить часть ненужных данных.
входящие данные в файле DataTable.xlsx
На листе Input - входящие данные
На листе output - то что надо получить
я пытался сделать путем перебора столбцов, но почемуто работает не корректно, да и выглядит это крайне не красиво.
Подскажите может есть варианты более изящьные.
private DataTable GetTerminalDataTable(DataSet TerminalData)
{
DataSet ds = TerminalData;
#region Обработка DataSet
// Создаем новую таблицу
DataTable TabPivot = new DataTable();
TabPivot.Columns.Add("YCOOR", typeof(int));
TabPivot.Columns.Add("PRINTMODE", typeof(string));
TabPivot.Columns.Add("TEXT", typeof(string));
string Text = "";
string Printmode = "";
int Y = 0;
// Начинаем перебирать таблицы
for (int tab = 0; tab < ds.Tables.Count; tab++)
{
if (ds.Tables[tab].Columns.Count > 1)
{
//AddButton("Нет активных заданий на перемещение", 0, 6);
//MessageBox.Show($"Данных больше 1");
//Начинаем перебирать данные в этой таблице
for (int column = 0; column < ds.Tables[tab].Columns.Count; column++)
{
DataRow DRow = ds.Tables[tab].Rows[0];
int count = 0; //счетчик для подсчета и нумерации строк (ROW)
if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "YCOOR")
{
Y = SqlExtensions.ConvertStringToInt(SqlExtensions.GetColumnValue(DRow, column));
}
if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "PRINTMODE" && SqlExtensions.GetColumnValue(DRow, column) != "CLEAR" && SqlExtensions.GetColumnValue(DRow, column) != "CLSCR" && SqlExtensions.GetColumnValue(DRow, column) != "CENTERED")
{
Printmode = SqlExtensions.GetColumnValue(DRow, column);
}
if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "TEXT")
{
Text = SqlExtensions.GetColumnValue(DRow, column);
}
if (!string.IsNullOrEmpty(Text) && !(string.IsNullOrEmpty(Printmode)) && Y >= 0)
{
var r = TabPivot.NewRow();
r["YCOOR"] = Y;
r["PRINTMODE"] = Printmode;
r["TEXT"] = Text;
TabPivot.Rows.Add(r); //добавляет запись в конец таблицы
count++;
}
}
}
}
#endregion
return TabPivot;
}
Необходимо транспонировать таблицу из строки в столбик при чем необходимо отбросить часть ненужных данных.
входящие данные в файле DataTable.xlsx
На листе Input - входящие данные
На листе output - то что надо получить
я пытался сделать путем перебора столбцов, но почемуто работает не корректно, да и выглядит это крайне не красиво.
Подскажите может есть варианты более изящьные.
private DataTable GetTerminalDataTable(DataSet TerminalData)
{
DataSet ds = TerminalData;
#region Обработка DataSet
// Создаем новую таблицу
DataTable TabPivot = new DataTable();
TabPivot.Columns.Add("YCOOR", typeof(int));
TabPivot.Columns.Add("PRINTMODE", typeof(string));
TabPivot.Columns.Add("TEXT", typeof(string));
string Text = "";
string Printmode = "";
int Y = 0;
// Начинаем перебирать таблицы
for (int tab = 0; tab < ds.Tables.Count; tab++)
{
if (ds.Tables[tab].Columns.Count > 1)
{
//AddButton("Нет активных заданий на перемещение", 0, 6);
//MessageBox.Show($"Данных больше 1");
//Начинаем перебирать данные в этой таблице
for (int column = 0; column < ds.Tables[tab].Columns.Count; column++)
{
DataRow DRow = ds.Tables[tab].Rows[0];
int count = 0; //счетчик для подсчета и нумерации строк (ROW)
if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "YCOOR")
{
Y = SqlExtensions.ConvertStringToInt(SqlExtensions.GetColumnValue(DRow, column));
}
if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "PRINTMODE" && SqlExtensions.GetColumnValue(DRow, column) != "CLEAR" && SqlExtensions.GetColumnValue(DRow, column) != "CLSCR" && SqlExtensions.GetColumnValue(DRow, column) != "CENTERED")
{
Printmode = SqlExtensions.GetColumnValue(DRow, column);
}
if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "TEXT")
{
Text = SqlExtensions.GetColumnValue(DRow, column);
}
if (!string.IsNullOrEmpty(Text) && !(string.IsNullOrEmpty(Printmode)) && Y >= 0)
{
var r = TabPivot.NewRow();
r["YCOOR"] = Y;
r["PRINTMODE"] = Printmode;
r["TEXT"] = Text;
TabPivot.Rows.Add(r); //добавляет запись в конец таблицы
count++;
}
}
}
}
#endregion
return TabPivot;
}