我输出多个表格,其中至少有两行标题信息,后跟0或几行数据......
我的问题是有时表格会覆盖页面的末尾。
如何防止这种情况 - MS Word表格中是否存在类似doNotWrap的属性?
以下是我正在使用的代码:
// it's an Account list so what follows will be account data then transactions
string[] sValues = pqRequests[s].Split('\t');
if (sValues[0]=="01")
{
iTable++;
// output header info
if (newTable==true)
{
int rowsToGoDown = 2;
if (!firstTable)
{
oWord.Selection.MoveDown(WdUnits.wdLine, rowsToGoDown);
firstTable = true;
}
oWord.Selection.Tables[1].Select();
oWord.Selection.Copy();
oWord.Selection.MoveDown(WdUnits.wdLine, 1);
oWord.Selection.TypeParagraph();
oWord.Selection.PasteAndFormat(WdRecoveryType.wdFormatOriginalFormatting);
// remove all the excess rows
if (oWord.Selection.Tables[1].Rows.Count>2)
{
int rowsToRemove = oWord.Selection.Tables[1].Rows.Count - 3;
if (!pqRequests[s+1].StartsWith("02"))
{
rowsToRemove = oWord.Selection.Tables[1].Rows.Count - 2;
}
oWord.Selection.MoveUp(WdUnits.wdLine, rowsToRemove, WdMovementType.wdExtend);
oWord.Selection.Rows.Delete();
}
}
oWordDoc.Tables[iTable].Cell(2, 1).Range.Text = sValues[1]; // Account number
oWordDoc.Tables[iTable].Cell(2, 2).Range.Text = sValues[2]; // Account Type
oWordDoc.Tables[iTable].Cell(2, 3).Range.Text = sValues[3]; // Account Currency
oWordDoc.Tables[iTable].Cell(2, 4).Range.Text = sValues[4]; // Account Balance
iRow = 4;
newTable = true;
}
else
{
// Transaction List
if (oWordDoc.Tables[iTable].Rows.Count<3)
// we need to get a row from another table and copy it
{
oWordDoc.Tables[iSavedTable].Select();
oWord.Selection.Rows[iSavedRow].Select();
oWord.Selection.Copy();
oWordDoc.Tables[iTable].Select();
oWord.Selection.MoveDown(WdUnits.wdLine, 1);
oWord.Selection.PasteAndFormat(WdRecoveryType.wdFormatOriginalFormatting);
}
for (int iDx = 2; iDx <= 5; iDx++)
{
oWordDoc.Tables[iTable].Cell(iRow, iDx).Range.Text = sValues[iDx - 1];
}
// only add a row if the next line is another transaction line
if (pqRequests[s+1].StartsWith("02"))
{
oWordDoc.Tables[iTable].Rows.Add(ref oMissing);
iSavedTable = iTable;
iSavedRow=oWordDoc.Tables[iTable].Rows.Count-1;
}
iRow++;
}
}
else
{
string[] sValues = pqRequests[s].Split('\t');
// Transaction List
for (int iDx = 2; iDx <= 5; iDx++)
{
oWordDoc.Tables[2].Cell(iRow, iDx).Range.Text = sValues[iDx - 1];
}
oWordDoc.Tables[2].Rows.Add(ref oMissing);
iRow++;
}
}
答案 0 :(得分:2)
要使用的属性不在表中,放在当前的段落中,它们是 KeepWithNext 和 KeepLinesTogether
这些必须设置为true,但在伟大的 Interop 传统中,不接受布尔值,必须是 int ,再次,在伟大的 Interop中不一致的传统,true的值实际上是 -1