Wybranie tekstu z pliku doc

Wybranie tekstu z pliku doc
aksimoN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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ć?

Kopiuj
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ć

kzkzg
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 935
1
Kopiuj
            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);
aksimoN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
0
kzkzg napisał(a):
Kopiuj
            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

BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 214
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

aksimoN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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();

BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 214
0
Kopiuj
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.

aksimoN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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:

Kopiuj
 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);
                }
            }

        }

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.