Wybranie tekstu z pliku doc

0

Cześć, próbuję napisać aplikację w win form w która po wybraniu pliku *.doc wyświetli część zawartości tego pliku która znajduje się pomiędzy jakimiś dwoma tekstami.
Mam na razie coś takiego i nie wiem jak teraz podejść do wybrania tekstu który znajduje się pomiędzy dwoma zdefiniowanymi "znacznikami" Prefix = "Start", Sufix = "End".

Czyli chodzi o wyświetlenie z pliku tekstu który znajdującego się pomiędzy tekstem "Start" i "End".

Czy zamiast oDoc.ActiveWindow.Selection.WholeStory(); trzeba użyć jakiegoś Find'a czy jeszcze inaczej powinno się to zrealizować?

public void button1_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog ofd = new OpenFileDialog() { ValidateNames = true, Multiselect = false, Filter = "Word Doucment|*.docx|Word 97 - 2003 Document|*.doc" })
            {
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    object readOnly = true;
                    object visible = true;
                    object save = false;
                    object fileName = ofd.FileName;
                    object missing = Type.Missing;
                    object newTemplate = false;
                    object docType = 0;
                    object Prefix = "Start";
                    object Sufix = "End";

                    Microsoft.Office.Interop.Word._Document oDoc = null;
                    Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application() { Visible = false };
                    oDoc = oWord.Documents.Open(
                            ref fileName, ref missing, ref readOnly, ref missing,
                            ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref visible,
                            ref missing, ref missing, ref missing, ref missing);


                    oDoc.ActiveWindow.Selection.WholeStory();
                    oDoc.ActiveWindow.Selection.Copy();
                    IDataObject data = Clipboard.GetDataObject();
                    rtfData.Rtf = data.GetData(DataFormats.Rtf).ToString();
                    oWord.Quit(ref missing, ref missing, ref missing);
                }
            } 

ps. docelowo znaleziony tekst chciałbym zapisać do zmiennej żeby móc nad nim dalej popracować

1
            var startString = "Start";
            var endString = "End";

            var startIndex = text.IndexOf(startString);
            var endIndex = text.IndexOf(endString);

            var result = text.Substring(startIndex + startString.Length, endIndex - startIndex - startString.Length);
0
kzkzg napisał(a):
            var startString = "Start";
            var endString = "End";

            var startIndex = text.IndexOf(startString);
            var endIndex = text.IndexOf(endString);

            var result = text.Substring(startIndex + startString.Length, endIndex - startIndex - startString.Length);

Ten kod rozumiem i nawet sam bym napisał ale chodzi o to żeby go zastosować do czegoś co siedzi w pliku *.doc

0

Do odczytu pliku z formatu doc potrzebujesz odpowiedniej biblioteki Microsoft.Office.Interop.Word znajdziesz ją np. w NuGet.

A przykład kodu masz tutaj np.
https://stackoverflow.com/questions/37072832/how-to-read-or-copy-text-from-docx-odt-doc-files

Albo tutaj
https://social.msdn.microsoft.com/Forums/en-US/564d4efc-26d1-4db9-a2e4-8a6e2fad92e3/get-the-text-of-words-from-a-word-document?forum=vsto

0
Botek napisał(a):

Do odczytu pliku z formatu doc potrzebujesz odpowiedniej biblioteki Microsoft.Office.Interop.Word znajdziesz ją np. w NuGet.

A przykład kodu masz tutaj np.
https://stackoverflow.com/questions/37072832/how-to-read-or-copy-text-from-docx-odt-doc-files

Albo tutaj
https://social.msdn.microsoft.com/Forums/en-US/564d4efc-26d1-4db9-a2e4-8a6e2fad92e3/get-the-text-of-words-from-a-word-document?forum=vsto

Jak widać w załączonym kodzie wykorzystuję właśnie bibliotekę Microsoft.Office.Interop.Word tylko nie umiem teraz sobie dalej poradzić z nią (jestem też lamus w WinForms) ponieważ nie wiem jak powiązać jedno z drugim. Chodzi o to żeby od razu wyciągnąć tylko to co mnie interesuje. Docelowo będę chciał wyciągać hurtowo dane z większej ilości plików.

Próbowałem z Range ale nie pozwala tego użyć

Myślę że trzeba pokombinować z tą linią i zaznaczyć to co mnie interesuje :

oDoc.ActiveWindow.Selection.WholeStory();

0
using System;
using Microsoft.Office.Interop.Word;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Application application = new Application();
            Document word = application.Documents.Open("word.doc");
            object startPosition = 0;

           object endPosition = (object)word.Characters.Count;
            string text = word.Range(startPosition,endPosition).Text;

            var startString = "Start";
            var endString = "End";

            var startIndex = text.IndexOf(startString);
            var endIndex = text.IndexOf(endString);

            var result = text.Substring(startIndex + startString.Length, endIndex - startIndex - startString.Length);

        }
    }
}

Spróbuj czegoś w tym stylu. Nie przetestowałem tego ponieważ trzeba mieć worda 2013 a ja mam worda 2019 taka dobra biblioteka.

0

Poszedłem trochę na skróty ponieważ okazało się iż potrzebuję zawartość konkretnych komórek z tablicy z pliku *.docx więc wyszło coś takiego:

 public void button1_Click(object sender, EventArgs e)
      {
           using (OpenFileDialog ofd = new OpenFileDialog() { ValidateNames = true, Multiselect = false, Filter = "Word Doucment|*.docx|Word 97 - 2003 Document|*.doc" })
           {
               if (ofd.ShowDialog() == DialogResult.OK)
                {
                   object readOnly = true;
                    object visible = true;
                    object save = false;
                    object fileName = ofd.FileName;
                    object missing = Type.Missing;
                    object newTemplate = false;
                    object docType = 0;

                    Microsoft.Office.Interop.Word._Document doc = null;
                    Microsoft.Office.Interop.Word._Application app = new Microsoft.Office.Interop.Word.Application() { Visible = false };
                    doc = app.Documents.Open(fileName);
                                        
                    Microsoft.Office.Interop.Word.Cell produkt = doc.Tables[1].Cell(2,3);
                    Microsoft.Office.Interop.Word.Cell produkt2 = doc.Tables[1].Cell(10, 3);
                    string komo1 = produkt.Range.Text;
                    string komo2= produkt2.Range.Text;
                    MessageBox.Show("Wczytano z pliku");
                    rtfData.Text = komo1+komo2;                   
                    app.Quit(ref missing, ref missing, ref missing);
                }
            }

        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1