/**
* 纵向单元格合并
*
* 说明:如合并了第一行第一列和第二行第一列两个单元格,则单元格cell(2, 1)已经不存在,继续操作会有异常,
* 只有通过cell(1, 1)来获取合并后的单元格
*
*/
private static void verticalCellMerge(Word.Table table, int startRowIndex, int columnIndex)
{
string previousText = table.Cell(startRowIndex++, columnIndex).Range.Text; // 保存对比文字
int previousRowIndex = startRowIndex - 1; // 因刚已经+1了,所以再减回去
for (int i = startRowIndex; i <= table.Rows.Count; ++i) // 遍历所有行的columnIndex列,发现相同的合并,从起始行的下一行开始对比
{
string currentText = table.Cell(i, columnIndex).Range.Text;
if (previousText.Equals(currentText))
{
table.Cell(previousRowIndex, columnIndex).Merge(table.Cell(i, columnIndex)); // 合并先前单元格和当前单元格
table.Cell(previousRowIndex, columnIndex).Range.Text = currentText; // 因为合并后并没有将单元格内容去除,需要手动修改
table.Cell(previousRowIndex, columnIndex).Select();
WordApp.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; // 水平居中显示
table.Cell(previousRowIndex, columnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中
}
else
{
previousText = currentText; // 将对比文字替换为当前的内容
previousRowIndex = i; // 检索到不同的内容,将当前行下标置为先前行下标,用于合并
}
}
}
/// <summary>
/// 横向单元格合并
/// 注意:在合并单元格后必须将纵列数减去1
/// 如第一行第一列和第一行第二列合并后,原第一行第三列将变成第一行第二列,这就是在合并后i不加1的原因
/// </summary>
/// <param name="WordApp"></param>
/// <param name="table"></param>
/// <param name="startColumnIndex"></param>
/// <param name="rowIndex"></param>
private static void horizontalCellMerge(Word.Application WordApp, Word.Table table, int startColumnIndex, int rowIndex)
{
string previousText = table.Cell(rowIndex, startColumnIndex).Range.Text; // 保存对比文字
int previousColumnIndex = startColumnIndex++; // 保存先前对比列下标
int colCount = table.Columns.Count;
for (int i = startColumnIndex; i <= colCount;) // 遍历所有行的columnIndex列,发现相同的合并,从起始行的下一行开始对比
{
string currentText = table.Cell(rowIndex, i).Range.Text;
if (previousText.Equals(currentText))
{
table.Cell(rowIndex, previousColumnIndex).Merge(table.Cell(rowIndex, i)); // 合并先前单元格和当前单元格
table.Cell(rowIndex, previousColumnIndex).Range.Text = currentText; // 因为合并后并没有将单元格内容去除,需要手动修改
table.Cell(rowIndex, previousColumnIndex).Select();
WordApp.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; // 水平居中显示
table.Cell(rowIndex, previousColumnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中
--colCount;
}
else
{
previousText = currentText; // 将对比文字替换为当前的内容
previousColumnIndex = i++; // 检索到不同的内容,将当前行下标置为先前行下标,用于合并
}
}
}
/**
* 在整个文档中根据书签名检索书签对象
*/
private static Word.Bookmark getBookmarkByName(string name)
{
foreach (Word.Bookmark bm in WordDoc.Bookmarks)
{
if (bm.Name.Equals(name))
return bm;
}
return null;
}
}
请发表评论