SVN r1065

SVN-Revision: r1065
This commit is contained in:
tdx
2025-12-02 09:22:54 +00:00
parent 594e020e24
commit 149ae2cec6
+100 -6
View File
@@ -129,11 +129,15 @@ namespace Lskj.AutoCreatWord
DataTable dataTable = dataSet.Tables[1]; DataTable dataTable = dataSet.Tables[1];
if (dataTable.Columns.Contains("crm_lco_xmbg") && dataTable.Columns.Contains("crm_lco_order")) 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)
{ {
if ((item["crm_lco_xmbg"] + "").Equals(ModelStr[i]) && (item["crm_lco_order"] + "").Equals(order + "")) foreach (DataRow item in selectRows)
{ {
item["crm_lco_xmbg"] = $"XMBG_{order}_{index}"; if ((item["crm_lco_xmbg"] + "").Equals(ModelStr[i]) && (item["crm_lco_order"] + "").Equals(order + ""))
{
item["crm_lco_xmbg"] = $"XMBG_{order}_{index}";
}
} }
} }
} }
@@ -939,6 +943,7 @@ namespace Lskj.AutoCreatWord
DataTable detailTab = dataSet.Tables[1]; DataTable detailTab = dataSet.Tables[1];
// word表格集合 // word表格集合
Dictionary<Table, List<int>> disMergeDic = new Dictionary<Table, List<int>>(); 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>(); List<GridTarGet> targetTables = new List<GridTarGet>();
string pattern = @"^(?!L)\{#\w+.(?!img_)\w+}$"; // 正则表达式匹配 {#xxx.xxxxx} string pattern = @"^(?!L)\{#\w+.(?!img_)\w+}$"; // 正则表达式匹配 {#xxx.xxxxx}
string pattern1 = @"^(?!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("!#", "#"); 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) if (!isBreak)
{ {
GridTarGet gridTarGet = new GridTarGet(); GridTarGet gridTarGet = new GridTarGet();
@@ -1018,6 +1036,10 @@ namespace Lskj.AutoCreatWord
DataTable dataTable = detailTab.Clone(); DataTable dataTable = detailTab.Clone();
detailTab.Rows.Cast<DataRow>().Where(n => (n["crm_lco_xmbg"] + "").Equals(gridTar.number)).CopyToDataTable(dataTable, LoadOption.OverwriteChanges);//当前表需要用到的数据源 detailTab.Rows.Cast<DataRow>().Where(n => (n["crm_lco_xmbg"] + "").Equals(gridTar.number)).CopyToDataTable(dataTable, LoadOption.OverwriteChanges);//当前表需要用到的数据源
Table table = gridTar.targetTable; 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>(); List<string> columnNames = new List<string>();
foreach (TableCell cell in table.Rows[gridTar.rowIndex].Cells) foreach (TableCell cell in table.Rows[gridTar.rowIndex].Cells)
@@ -1047,8 +1069,9 @@ namespace Lskj.AutoCreatWord
for (int j = 0; j < columnNames.Count; j++) for (int j = 0; j < columnNames.Count; j++)
{ {
string columnName = columnNames[j]; string columnName = columnNames[j];
Paragraph cloneParagraph = (Paragraph)table.Rows[gridTar.rowIndex].Cells[j].Paragraphs[0].Clone(); Paragraph sourceParagraph = table.Rows[gridTar.rowIndex].Cells[j].Paragraphs[0];
CharacterFormat characterFormat = (cloneParagraph.ChildObjects[0] as TextRange).CharacterFormat; Paragraph cloneParagraph = (Paragraph)sourceParagraph.Clone();
CharacterFormat characterFormat = (sourceParagraph.ChildObjects[0] as TextRange).CharacterFormat;
ParagraphFormat paragraphFormat = newRow.Cells[j].Paragraphs[0].Format; ParagraphFormat paragraphFormat = newRow.Cells[j].Paragraphs[0].Format;
newRow.Cells[j].Paragraphs.Clear(); newRow.Cells[j].Paragraphs.Clear();
newRow.Cells[j].Paragraphs.Add(cloneParagraph); newRow.Cells[j].Paragraphs.Add(cloneParagraph);
@@ -1706,4 +1729,75 @@ namespace Lskj.AutoCreatWord
{ {
Paragraph paragraph = textRange.OwnerParagraph; Paragraph paragraph = textRange.OwnerParagraph;
CharacterFormat characterFormat = textRange.CharacterFormat; 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();