Interop - prevent a table wrapping over two pages in Word

一个人想着一个人 提交于 2020-01-14 05:06:05

问题


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.

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++;
    }

}

回答1:


the properties to use are not in the table, put in the current Paragraph, and they are KeepWithNext and KeepLinesTogether

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



来源:https://stackoverflow.com/questions/20741729/interop-prevent-a-table-wrapping-over-two-pages-in-word

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!