使用C#

时间:2015-08-28 22:44:13

标签: c# ms-word rtf

我目前正在开发一个项目,用于转换来自"标准的测试"字格式为我们正在使用的新Saras程序接受的格式。

我能够解析文件并收集我想要的信息。不幸的是格式化有问题,我只知道如何解析和插入纯文本。

到目前为止,我发现的一些选项包括使用.Copy()方法,然后在单元格上使用.Paste()方法。我正在使用一个类来间歇地保存数据,这样如果另一个解析算法需要用于下一个人的标准"格式,然后数据仍然可以以相同的方式放入excel文档,开发人员只需要担心解析新格式。

注意:如果有办法将其粘贴到一种格式(如独立单元格)中,然后将单元格或单元格值设置为它,那就太棒了。

我发现的另一个选项是使用interop.word.range.formattedtext属性。如果我要从一个word文档转到另一个word文档,这将很有效,但我需要以某种方式将此格式化文本转换为excel单元格。

我当前的思考过程是将文本放入RTF对象中。稍后我会把它放到Excel中,方法是将RTF.text插入单元格并使用RTF.format格式化每个字符。这似乎比我应该做的工作更多。

请让我知道你们想出的一切!

以下是一些代码:

STORAGE:

class Question
{
    public string text;
    private List<string> responses;

    public Question(string txt, List<string> r)
    {
        text = txt;
        responses = r;
    }
    public List<string> getResponses() { return responses; }
}

PARSING:

if (p < MAX && docs.Paragraphs[p].Range.ListFormat.ListValue != 0)
{
    // question main line
    qTxt = docs.Paragraphs[p].Range.Text.ToString();
    p++;
    // question pos responses NOTE: THIS WILL BE USED TO DO MULTIPLE CHOICE LATER
    for (; p < MAX && docs.Paragraphs[p].Range.ListFormat.ListValue == 0; p++)
    {
        tmp = docs.Paragraphs[p].Range.Text.ToString();
        if (tmp != null && tmp != "\r")
            qTxt += " \r\n " + docs.Paragraphs[p].Range.Text.ToString();
    }
}

设定价值:

foreach (Question question in questionList)
{
    ...
    // ITEM TEXT
    ws.Cells[row, 15].Value2 = question.text;
    ...
}

同样,这段代码适用于设置纯文本,我只想知道如何在那里获取格式。

提前致谢!

更新: 我想出了一种使复制和粘贴工作的方法。傻傻的我,我可以保持excel文件一直打开。构造函数现在设置第一行,然后parseDocument函数将用数据填充行。

斗争: 我目前正在使用复制和粘贴功能,但似乎是将文本图像放入我的文档而不是格式化文本本身。

CODE:

// Get the title
Word.Range rng = docs.Paragraphs[p].Range.Duplicate;
int index = 0;
for (; p < MAX && docs.Paragraphs[p].Range.ListFormat.ListValue == 0; p++)
{
    string tmp = docs.Paragraphs[p].Range.Text.ToString();
    if (tmp != null && tmp != "\r")
        ++index;
}
rng.MoveEnd(Word.WdUnits.wdParagraph, index);
rng.Copy();
xlDoc.ws.Range["A1", "A1"].PasteSpecial(); // Pastes an image of the title
唉,我正在寻找解决这个问题的方法。如果您有任何解决方案,请告诉我。

谢谢!

PS。如果我取得任何进展,我会不断更新这篇文章。

0 个答案:

没有答案