SVN r1065
SVN-Revision: r1065
This commit is contained in:
@@ -129,7 +129,10 @@ namespace Lskj.AutoCreatWord
|
||||
DataTable dataTable = dataSet.Tables[1];
|
||||
if (dataTable.Columns.Contains("crm_lco_xmbg") && dataTable.Columns.Contains("crm_lco_order"))
|
||||
{
|
||||
foreach (DataRow item in dataTable.Rows)
|
||||
var selectRows = dataTable.Rows.Cast<DataRow>().Where(n => (n["crm_lco_xmbg"] + "").Equals(ModelStr[i]) && (n["crm_lco_order"] + "").Equals(order + ""));
|
||||
if (selectRows != null)
|
||||
{
|
||||
foreach (DataRow item in selectRows)
|
||||
{
|
||||
if ((item["crm_lco_xmbg"] + "").Equals(ModelStr[i]) && (item["crm_lco_order"] + "").Equals(order + ""))
|
||||
{
|
||||
@@ -139,6 +142,7 @@ namespace Lskj.AutoCreatWord
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 在菜单模板中找到对应的 start 和 end 标记
|
||||
string[] moduleIdWithPms = moduleIdStr.Split('_');
|
||||
string moduleId = moduleIdWithPms[0];
|
||||
@@ -939,6 +943,7 @@ namespace Lskj.AutoCreatWord
|
||||
DataTable detailTab = dataSet.Tables[1];
|
||||
// word表格集合
|
||||
Dictionary<Table, List<int>> disMergeDic = new Dictionary<Table, List<int>>();
|
||||
Dictionary<Table, List<string>> mergeDic = new Dictionary<Table, List<string>>();
|
||||
List<GridTarGet> targetTables = new List<GridTarGet>();
|
||||
string pattern = @"^(?!L)\{#\w+.(?!img_)\w+}$"; // 正则表达式匹配 {#xxx.xxxxx}
|
||||
string pattern1 = @"^(?!L)\{!#\w+.(?!img_)\w+}$"; // 正则表达式匹配 {!#xxx.xxxxx}
|
||||
@@ -992,6 +997,19 @@ namespace Lskj.AutoCreatWord
|
||||
}
|
||||
tableCell.Paragraphs[0].Text = tableCell.Paragraphs[0].Text.Replace("!#", "#");
|
||||
}
|
||||
string npattern1 = @"\{#\w+\.(\w+)\}";//匹配合并的列
|
||||
Match nmatch1 = Regex.Match(tableCell.Paragraphs[0].Text, npattern1, RegexOptions.IgnoreCase);
|
||||
if (nmatch1.Success)
|
||||
{
|
||||
if (mergeDic.ContainsKey(table))
|
||||
{
|
||||
mergeDic[table].Add($"{{{nmatch1.Groups[1].Value}}}");
|
||||
}
|
||||
else
|
||||
{
|
||||
mergeDic.Add(table, new List<string>() { $"{{{nmatch1.Groups[1].Value}}}" });
|
||||
}
|
||||
}
|
||||
if (!isBreak)
|
||||
{
|
||||
GridTarGet gridTarGet = new GridTarGet();
|
||||
@@ -1018,6 +1036,10 @@ namespace Lskj.AutoCreatWord
|
||||
DataTable dataTable = detailTab.Clone();
|
||||
detailTab.Rows.Cast<DataRow>().Where(n => (n["crm_lco_xmbg"] + "").Equals(gridTar.number)).CopyToDataTable(dataTable, LoadOption.OverwriteChanges);//当前表需要用到的数据源
|
||||
Table table = gridTar.targetTable;
|
||||
if (!disMergeDic.ContainsKey(table) && mergeDic.ContainsKey(table) && mergeDic[table].Count == table.Rows[gridTar.rowIndex].Cells.Count)
|
||||
{
|
||||
GetGroupData(mergeDic, table, ref dataTable);
|
||||
}
|
||||
// 从表格的第一行获取列名
|
||||
List<string> columnNames = new List<string>();
|
||||
foreach (TableCell cell in table.Rows[gridTar.rowIndex].Cells)
|
||||
@@ -1047,8 +1069,9 @@ namespace Lskj.AutoCreatWord
|
||||
for (int j = 0; j < columnNames.Count; j++)
|
||||
{
|
||||
string columnName = columnNames[j];
|
||||
Paragraph cloneParagraph = (Paragraph)table.Rows[gridTar.rowIndex].Cells[j].Paragraphs[0].Clone();
|
||||
CharacterFormat characterFormat = (cloneParagraph.ChildObjects[0] as TextRange).CharacterFormat;
|
||||
Paragraph sourceParagraph = table.Rows[gridTar.rowIndex].Cells[j].Paragraphs[0];
|
||||
Paragraph cloneParagraph = (Paragraph)sourceParagraph.Clone();
|
||||
CharacterFormat characterFormat = (sourceParagraph.ChildObjects[0] as TextRange).CharacterFormat;
|
||||
ParagraphFormat paragraphFormat = newRow.Cells[j].Paragraphs[0].Format;
|
||||
newRow.Cells[j].Paragraphs.Clear();
|
||||
newRow.Cells[j].Paragraphs.Add(cloneParagraph);
|
||||
@@ -1706,4 +1729,75 @@ namespace Lskj.AutoCreatWord
|
||||
{
|
||||
Paragraph paragraph = textRange.OwnerParagraph;
|
||||
CharacterFormat characterFormat = textRange.CharacterFormat;
|
||||
paragraph.Text = "";
|
||||
for (int k = 0; k < result.Length; k++)
|
||||
{
|
||||
string resultText = result[k];
|
||||
if (k > 0)
|
||||
{
|
||||
Break lineBreak = new Break(document, BreakType.LineBreak);
|
||||
paragraph.ChildObjects.Add(lineBreak);
|
||||
}
|
||||
TextRange range = paragraph.AppendText(resultText);
|
||||
range.ApplyCharacterFormat(characterFormat);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取分组后数据
|
||||
/// </summary>
|
||||
private static void GetGroupData(Dictionary<Table, List<string>> mergeDic, Table table, ref DataTable dataTable)
|
||||
{
|
||||
try
|
||||
{
|
||||
bool groupSuccess = true;
|
||||
DataTable selectTable = new DataTable();
|
||||
foreach (string item in mergeDic[table])
|
||||
{
|
||||
string columnName = item.Trim('{', '}');
|
||||
if (dataTable.Columns.Contains(columnName))
|
||||
{
|
||||
selectTable.Columns.Add(dataTable.Columns[columnName].ColumnName, dataTable.Columns[columnName].DataType);
|
||||
}
|
||||
else
|
||||
{
|
||||
groupSuccess = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (groupSuccess)
|
||||
{
|
||||
foreach (DataRow sourceRow in dataTable.Rows)
|
||||
{
|
||||
DataRow dataRow = selectTable.NewRow();
|
||||
foreach (DataColumn dataColumn in dataRow.Table.Columns)
|
||||
{
|
||||
dataRow[dataColumn] = sourceRow[dataColumn.ColumnName];
|
||||
}
|
||||
selectTable.Rows.Add(dataRow);
|
||||
}
|
||||
List<string> columns = new List<string>();
|
||||
foreach (DataColumn item in selectTable.Columns)
|
||||
{
|
||||
columns.Add(item.ColumnName);
|
||||
}
|
||||
// 动态定义要分组的列
|
||||
string[] groupByColumns = columns.ToArray();
|
||||
string separator = Guid.NewGuid().ToString().ToLower().Replace("-", "");
|
||||
// 使用 LINQ 按动态列进行分组
|
||||
var groupedData = selectTable.AsEnumerable()
|
||||
.GroupBy(row => new
|
||||
{
|
||||
// 动态选择分组键
|
||||
Key = string.Join(separator, groupByColumns.Select(col => row.Field<object>(col)))
|
||||
})
|
||||
.Select(g => new
|
||||
{
|
||||
Key = g.Key
|
||||
});
|
||||
|
||||
// 创建新的 DataTable 用于存储分组结果
|
||||
DataTable groupedTable = selectTable.Clone();
|
||||
|
||||
Reference in New Issue
Block a user