Создание файла Open XML в .NET - схема - PullRequest
0 голосов
/ 29 мая 2009

Я пытаюсь создать генератор отчетов в приложении C # для своего босса, я наткнулся на эту страницу и заглянул в RichTextBoxes и подумал, что могу развить эту идею, чтобы сделать то, что ищет мой босс. http://openxmldeveloper.org/articles/OpenXMLDocFromDotNet.aspx

Проблема, с которой я сталкиваюсь, - это пример кода для части XML, предполагаемой, что вы создавали приложение в бета-версии Office 2007. Перечисленная здесь схема не работает для розничной версии Office 2007. Может кто-нибудь показать мне, где я могу найти, чтобы узнать больше о схеме в целом, или объяснить, что код делает здесь? В качестве альтернативы, если у кого-то есть другое предложение по созданию файла .docx на основе содержимого расширенного текстового поля, это было бы очень полезно. Я нашел разные ресурсы, которые предлагали советы, подобные этой: http://nishantrana.wordpress.com/2007/11/03/creating-word-document-using-c/

Но у меня продолжали возникать проблемы с распознаванием того, что такое WordApp.

Вот код из первой ссылки со схемой ошибок.

private void GenerateDocument_Click(object sender, EventArgs e)
{
    string _nameSpaceURI = "http://schemas.microsoft.com/office/word/2005/10/wordml";
    string docFileName = GetSavePath();

    //-- Step 1 - Creating the document xml
    XmlDocument doc = new XmlDocument();
    XmlElement _wWordDoc = doc.CreateElement("w:wordDocument", _nameSpaceURI);
    doc.AppendChild (_wWordDoc);
    XmlElement _wbody = doc.CreateElement("w:body",_nameSpaceURI);
    _wWordDoc.AppendChild(_wbody);
    // Check if the string contains a line feed
    string[] _SplitStr = mleTextForDocument.Text.Split('\n');
    // if it contains line feed then each entry with a line feed goes to a new paragraph.
    for (int row = 0; row < _SplitStr.Length; row++)
    {
         XmlElement _wp1 = doc.CreateElement("w:p",_nameSpaceURI);
         _wbody.AppendChild(_wp1);
         XmlElement _wr1 = doc.CreateElement("w:r", _nameSpaceURI);
         _wp1.AppendChild(_wr1);
         XmlElement _wt11 = doc.CreateElement("w:t", _nameSpaceURI);
         _wr1.AppendChild(_wt11);
         XmlNode _wt1 = doc.CreateNode(XmlNodeType.Text, "w:t",_nameSpaceURI);
         _wt1.Value = _SplitStr[row];
         _wt11.AppendChild(_wt1);
    }

    //-- Step 2 - Creating the Package
    Package package = null;
    package = Package.Open(docFileName, FileMode.Create, FileAccess.ReadWrite);

    //-- Step 3 - Create the main document part (document.xml)
    Uri uri = new Uri("/word/document.xml", UriKind.Relative);
    PackagePart part = package.CreatePart(uri, "application/vnd.ms-word.main+xml");
    StreamWriter partWrt = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write));
    doc.Save(partWrt);
    partWrt.Close();
    package.Flush();

    //-- Step 4 - Create the relationship file
    uri = new Uri("/word/document.xml", UriKind.Relative);
    PackageRelationship rel = package.CreateRelationship(uri, TargetMode.Internal, "http://schemas.microsoft.com/office/2006/relationships/officeDocument", "rId1");
    package.Flush();

    //-- Step 5- Close the document.
    package.Close();
 }

Извините за отсутствие ясного вопроса, но я действительно не знаю, какой вопрос задать. Я никогда не использовал схемы раньше, никогда не использовал XML, и никогда не приходилось добавлять ссылки на мои проекты раньше. Любые советы или предложения приветствуются.

1 Ответ

3 голосов
/ 30 мая 2009

Несмотря на неоднозначный вопрос, и, видимо, он исходит от моего злого двойника bizzaro (nwonknu) (elgoog), шутка верно.

Во всяком случае, я сказал это до , и я скажу это снова источник качества совет для XML / OpenXML Эрик Белый . Он очень активный блогер, выглядит как 4+ года постоянных публикаций (например, когда хорошие источники просто испаряются), в любом случае, вы легко сможете пролистать его блог в течение нескольких минут, и я уверен, что ваше понимание OpenXML + Linq 2 XML немного более твердый.

...