Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
1

Вывод текста построчно в файл .docx

20.05.2014, 14:51. Показов 2913. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Есть следующий код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;
namespace KP_DEMO
{
    public partial class Form1 : Form
    {
        string put;
        public Word.Application wordapp;
        public Word.Document worddocument;
        private Word.Paragraphs wordparagraphs;
        private Word.Paragraph wordpararaph;
        public bool ind=false;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {   
           
            wordapp = new Word.Application();
            openFileDialog1.ShowDialog();
            put = openFileDialog1.FileName;
            wordapp.Visible = false;
            Object filename = put;
            Object confirmConversions = true;
            Object readOnly = false;
            Object addToRecentFiles = true;
            Object passwordDocument = Type.Missing;
            Object passwordTemplate = Type.Missing;
            Object revert = false;
            Object writePasswordDocument = Type.Missing;
            Object writePasswordTemplate = Type.Missing;
            Object format = Type.Missing;
            Object encoding = Type.Missing; ;
            Object oVisible = Type.Missing;
            Object openConflictDocument = Type.Missing;
            Object openAndRepair = Type.Missing;
            Object documentDirection = Type.Missing;
            Object noEncodingDialog = false;
            Object xmlTransform = Type.Missing;
           worddocument=wordapp.Documents.Open(ref filename,ref confirmConversions, ref readOnly, ref addToRecentFiles,
           ref passwordDocument, ref passwordTemplate, ref revert,
           ref writePasswordDocument, ref writePasswordTemplate,
           ref format, ref encoding, ref oVisible,
           ref openAndRepair, ref documentDirection, ref noEncodingDialog, ref xmlTransform);
           wordparagraphs = worddocument.Paragraphs;
           int k = 1;
           Object oMissing = System.Reflection.Missing.Value;
           while(k<=10)
           {
               wordpararaph = (Word.Paragraph)wordparagraphs[k];
               wordpararaph.Range.Text = "Проба";
               worddocument.Paragraphs.Add(Type.Missing);
               k++;
           }
          // textBox1.Text = wordpararaph.Range.Text;
           wordapp.Visible = true;
            ind=true;
        }
 
        private void выходToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if(ind==true)
{
            wordapp.Quit(Word.WdSaveOptions.wdSaveChanges);
}
            Application.Exit();
            
        }
    }
}
Как видно из кода, из диалога получаем путь, создаем объект Word.Application, заполняем его текстом "Проба", по 10 строкам.
Однако при повторном выводе в этот же файл строки не заменяют друг-друга, а заполнение происходит добавлением слова "проба" к первым 5 строкам.
Как сделать именно построчный вывод(желательно с заменой текста, который находится в строке, на текст выводимый)?
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2014, 14:51
Ответы с готовыми решениями:

Вывод текста в файл построчно
Доброго времени суток форумчане! Помогите пожалуйста Надо написать программу ввода текста...

Поиск заданного текста (части строки) в текстовом файле и вывод результата построчно в другой текстовый файл
Здравствуйте! Есть файл 1.txt вида: &lt;img align=&quot;middle&quot; src=&quot;client.gif&quot;&gt;&amp;nbsp;&lt;a...

Вывод текста построчно
Только начал изучать Си, по этому прошу не бросать в меня камни :) Стоит задача. Вводится текст,...

Как задать вывод текста построчно в Memo?
помогите, пожалуйста) нужно загрузить в Мемо текстовый файл без двух его последних строк. ...

15
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
20.05.2014, 14:59 2
Забудьте Вы про Interop при работе с DocX... OpenXML SDK
0
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
20.05.2014, 15:11  [ТС] 3
Spawn, при работе со Office 2003, например, оно будет требовать пакет совместимости.
Его придется совать в инсталлятор.
Ну да ладно, похоже, придется писать именно так.

Добавлено через 9 минут
Spawn, и таки, в принципе, можно использовать и .doc, но, кажется, XML реально проще.
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
20.05.2014, 15:22 4
Зависит от заказчика всё, конечно, может найтись динозавр с 2000-м офисом (97 уже сомнительно), так что решать в конечном счёте Вам, но учитывая что для формирования docx таким образом вообще не нужен Office установленный, стоит задуматься
0
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
25.05.2014, 19:12  [ТС] 5
Spawn, да, есть вопрос.
Копался я в сабже, а построчный ввод из .docx так и не осилил.
Не подскажете ничего?
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.05.2014, 19:35 6
Talkoflights, качаем Open XML SDK и Productivity Tool, которая идёт с ней, там на основе готового Word/Excel можно посмотреть код на C#, довольно классная вещь.
0
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
25.05.2014, 19:38  [ТС] 7
Spawn, и это тоже юзали.
Допустим, есть такой код документа, 2 абзаца с текстом.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentFormat.OpenXml;
 
namespace GeneratedCode
{
    public class GeneratedClass
    {
        // Creates an Body instance and adds its children.
        public Body GenerateBody()
        {
            Body body1 = new Body();
 
            Paragraph paragraph1 = new Paragraph(){ RsidParagraphMarkRevision = "001D23AB", RsidParagraphAddition = "00C6258E", RsidParagraphProperties = "001D23AB", RsidRunAdditionDefault = "00C6258E" };
            BookmarkStart bookmarkStart1 = new BookmarkStart(){ Name = "_GoBack", Id = "0" };
            BookmarkEnd bookmarkEnd1 = new BookmarkEnd(){ Id = "0" };
 
            paragraph1.Append(bookmarkStart1);
            paragraph1.Append(bookmarkEnd1);
 
            SectionProperties sectionProperties1 = new SectionProperties(){ RsidRPr = "001D23AB", RsidR = "00C6258E" };
            PageSize pageSize1 = new PageSize(){ Width = (UInt32Value)11906U, Height = (UInt32Value)16838U };
            PageMargin pageMargin1 = new PageMargin(){ Top = 1134, Right = (UInt32Value)850U, Bottom = 1134, Left = (UInt32Value)1701U, Header = (UInt32Value)708U, Footer = (UInt32Value)708U, Gutter = (UInt32Value)0U };
            Columns columns1 = new Columns(){ Space = "708" };
            DocGrid docGrid1 = new DocGrid(){ LinePitch = 360 };
 
            sectionProperties1.Append(pageSize1);
            sectionProperties1.Append(pageMargin1);
            sectionProperties1.Append(columns1);
            sectionProperties1.Append(docGrid1);
 
            Paragraph paragraph2 = new Paragraph();
 
            Run run1 = new Run();
            Text text1 = new Text();
            text1.Text = "ras_ras";
 
            run1.Append(text1);
 
            paragraph2.Append(run1);
 
            Paragraph paragraph3 = new Paragraph();
 
            Run run2 = new Run();
            Text text2 = new Text();
            text2.Text = "ras_ras";
 
            run2.Append(text2);
 
            paragraph3.Append(run2);
 
            body1.Append(paragraph1);
            body1.Append(sectionProperties1);
            body1.Append(paragraph2);
            body1.Append(paragraph3);
            return body1;
        }
 
 
    }
}
Ясности как-то не прибавляет.
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.05.2014, 20:14 8
А в цикл завернуть соответствующий код для создания параграфа не получается разве?
0
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
25.05.2014, 22:23  [ТС] 9
Spawn, для считывания из существующего файла построчно?
Зачем параграфы?

Добавлено через 4 минуты
Spawn, в принципе, считывается он, только не построчно, а полностью и без форматирования(тупо весь текст одной строкой) с помощью InnerText. Но это немного не то.

Добавлено через 33 минуты
Собственно, главный вопрос-как узнать количество строк(параграфов) в документе, и как к ним непосредственно обращаться.

Добавлено через 50 минут
Актуально.

Добавлено через 33 минуты
Актуально.
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.05.2014, 22:31 10
Talkoflights, Вы этим скорее замечание от модераторов заработаете... если сейчас доберусь до студии, набросаю пример.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.05.2014, 22:38 11
Spawn, я недавно писал несколько примеров по openXML.
0
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
25.05.2014, 22:39  [ТС] 12
Spawn, спасибо заранее!
Вообще, если структурировать, то нужен построчный(он же попараграфовый) ввод из файла .doc\docx текста в массив типа string. При этом надо знать количество параграфов(для создания массива соответствующего размера).
Как-то так.
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.05.2014, 23:30 13
Цитата Сообщение от Talkoflights Посмотреть сообщение
Собственно, главный вопрос-как узнать количество строк(параграфов) в документе, и как к ним непосредственно обращаться.
C#
1
2
3
4
5
6
7
8
9
            WordprocessingDocument doc = WordprocessingDocument.Open("mydoc.docx", false);
            IEnumerable<Paragraph> paragraphs = doc.MainDocumentPart.Document.Body.Descendants<Paragraph>();
            int cnt = 1;
            Console.WriteLine("Всего параграфов: {0}", paragraphs.Count());
            foreach (Paragraph p in paragraphs)
            {
                Console.WriteLine("Параграф №{0}. Содержание: {1}.", cnt++, p.InnerText);
            }
            Console.ReadLine();
Usings
C#
1
2
3
4
5
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Collections.Generic;
using System.Linq;
Добавлено через 41 секунду
Естественно, что если внутри параграфа навороченный текст, то придётся его обрабатывать соответственно, но это уже детали

Добавлено через 36 секунд
Psilon, ага, видел Эту тему вообще пора в виде FAQ оформлять...
1
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
25.05.2014, 23:49  [ТС] 14
Spawn, на foreach выдает.
Индекс находился вне границ массива.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
 
namespace DEMO_XML
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog op = new OpenFileDialog();
            op.ShowDialog();
            string put;
            put = op.FileName;
            string vstavka = "ras_ras";
            WordprocessingDocument vvoddoc = WordprocessingDocument.Open(put, true);
            Body body = vvoddoc.MainDocumentPart.Document.Body;
 
            // Add new text.
            //Paragraph para = body.AppendChild(new Paragraph());
            //Run run = para.AppendChild(new Run());
            //run.AppendChild(new Text(vstavka));
            //Paragraph para2 = body.AppendChild(new Paragraph());
            //Run run2 = para2.AppendChild(new Run());
            //run2.AppendChild(new Text(vstavka)); 
            IEnumerable<Paragraph> paragraphs = vvoddoc.MainDocumentPart.Document.Body.Descendants<Paragraph>();
            int cnt = 1;
            richTextBox1.Lines[0] = Convert.ToString(paragraphs.Count());
            //foreach (Paragraph p in paragraphs)
            /*{
                int sch=1;
                richTextBox1.Lines[sch]= p.InnerText+ "\n";
                sch++;
            }*/
            // Close the handle explicitly.
            //vvoddoc.Close();
        }
    }
}
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.05.2014, 23:53 15
Talkoflights, индекс для RichTextBox не с 1 начинаться всяк должен...
0
25 / 25 / 17
Регистрация: 23.09.2012
Сообщений: 274
26.05.2014, 00:24  [ТС] 16
Spawn, забивается же с нуля, нет?
Количество параграфов я вывожу в нулевую строку.

Добавлено через 28 минут
Все, мой косяк, исправлено.
0
26.05.2014, 00:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2014, 00:24
Помогаю со студенческими работами здесь

Реализовать возможность сохранения текста в файл построчно
private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e) { ...

Как сделать вывод зашифрованного текста в один файл и расшифрованного текста в другой файл?
Нужно вывести текст зашифрованного сообщения в один файл и расшифрованное сообщение во второй файл...

Формирование матрицы по шаблону и вывод в файл построчно
Помогите плиз. С клавиатуры вводится порядок квадратной матрицы.Требуется формировать матрицу по...

Вывод DataSet в XML-файл построчно с использованием XmlTextWriter
Что нужно добавить к нижеприведенному коду, чтобы XML-файл формировался в нормальном построчном...

Как данные, посылаемые построчно из Arduino по СОМ-порту, записать построчно в текстовый файл?
Программирование для меня - неосновная область работы. Поэтому ищу готовые решения. И меня крепко...

Считывание из файла построчно и запись в файл построчно getline ()
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;fstream&gt; # include &lt;string&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru