互操作-防止表格在Word中包装超过两页 [英] Interop - prevent a table wrapping over two pages in Word
问题描述
我正在输出多个表,其中至少包含两行标题信息,后跟0或几行数据...
I am outputting multiple tables with a minimum of two lines of header information followed by 0 or several lines of data...
我的问题是,有时表会包裹在页面的末尾.
My problem is that sometimes the tables wrap over the end of the page.
如何防止这种情况-MS Word表中是否有诸如doNotWrap'之类的属性?
How can I prevent this - is there a s property like doNotWrap' in MS Word tables?
这是我正在使用的代码:
Here is the code I am using:
// 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++;
}
}
推荐答案
要使用的属性不在表中,而是放在当前段落中,它们是 KeepWithNext 和 KeepLinesTogether
the properties to use are not in the table, put in the current Paragraph, and they are KeepWithNext and KeepLinesTogether
必须将它们设置为true,但是在优良的 Interop 传统中,不接受布尔值,必须为 int ,在优良的 Interop中不遵循传统,true的值实际上是 -1
These must be set to true, but in great Interop tradition, a boolean value is not accepted, must be an int and again, in great Interop tradition of not being consistant, the value for true is actually -1
这篇关于互操作-防止表格在Word中包装超过两页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!