SVN r1065
SVN-Revision: r1065
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
Reference in New Issue
Block a user