互操作-防止表格在Word中包装超过两页 [英] Interop - prevent a table wrapping over two pages in Word

查看:120
本文介绍了互操作-防止表格在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆