Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить документ Word в базе Access? а именно прочитанный параграф 
:(
    Опции темы
Loiste
Дата 6.3.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 28.9.2005

Репутация: нет
Всего: нет



сабж...
открываю файл Word
читаю абзац
хочу потом сохранить прочитанную инфу как документ Word в базе Access
как это сделать?
PM MAIL   Вверх
Exception
Дата 6.3.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Прочитать абзац:
Код

Imports Microsoft.Office.Interop.Word

Public Class Main

    Private _wdApplication As New Microsoft.Office.Interop.Word.Application
    Private _wdDocument As Document = _wdApplication.Documents.Open("E:\WordFile.doc")

    Private Sub ShowText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show(_wdDocument.Paragraphs(1).Range.Text, "Текст 1-го параграфа", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub

    Private Sub Main_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        _wdDocument.Close(True)
        _wdApplication.Quit()
    End Sub

End Class

А по поводу сохранения его в базу Access -- юзай поиск, не раз обсуждалось.

Это сообщение отредактировал(а) Exception - 6.3.2006, 14:54
PM   Вверх
Exception
Дата 6.3.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



http://vingrad.ru/NET-VBNET-003016
уффф... smile

Это сообщение отредактировал(а) Exception - 7.3.2006, 13:16
PM   Вверх
Loiste
Дата 7.3.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 28.9.2005

Репутация: нет
Всего: нет



Как читать документ я знаю smile

Я не знаю как сохранить в базе.

А поиск не работает.
PM MAIL   Вверх
Exception
Дата 7.3.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Искать надо в разделе "Базы данных для .NET".
PM   Вверх
Akina
Дата 7.3.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Конвертани в RTF и спокойно засовывай в МЕМО...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Exception
Дата 7.3.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Погоди-ка. Тебе форматирование сохранять надо?
PM   Вверх
Loiste
Дата 9.3.2006, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 28.9.2005

Репутация: нет
Всего: нет



Код


using System;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
using System.Windows.Forms;
using Microsoft.Office.Interop.Word;

class DocumentSerializeDemo
{
    static byte[] GetBinaryData(Document doc)
    {
        Clipboard.SetDataObject(new DataObject(""));
        doc.Select();
        doc.Application.Selection.Copy();

        Hashtable tb = new Hashtable();
        IDataObject ido = Clipboard.GetDataObject();
        foreach(string format in ido.GetFormats())
            tb[format] = ido.GetData(format);

        BinaryFormatter fmt = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();
        fmt.Serialize(stream, tb);
        return stream.GetBuffer();
    }

    static void RestoreFromBinaryData(byte[] bin, Document targetDoc)
    {
        Clipboard.SetDataObject(new DataObject(""));
        BinaryFormatter fmt = new BinaryFormatter();
        MemoryStream stream = new MemoryStream(bin);
        Hashtable tb = (Hashtable)fmt.Deserialize(stream);
        DataObject ido = new DataObject();
        foreach(string format in tb.Keys)
            ido.SetData(format, tb[format]);
        Clipboard.SetDataObject(ido);

        targetDoc.Select();
        targetDoc.Application.Selection.Paste();
    }

    [STAThread]
    static void Main(string[] args)
    {
        object empty = Missing.Value;
        object rfalse = false;

        ApplicationClass app = new ApplicationClass();
        Document doc = app.Documents.Add(ref empty, ref empty, ref empty, ref empty);
        doc.Select();
        app.Selection.TypeText("содержимое документа");

        byte[] data = GetBinaryData(doc);
        doc.Close(ref rfalse, ref empty, ref empty);

        Document restoredDoc = app.Documents.Add(ref empty, ref empty, ref empty, ref empty);
        RestoreFromBinaryData(data, restoredDoc);
        object rfileName = "c:\\1.doc";
        restoredDoc.SaveAs(ref rfileName, ref empty, ref empty, ref empty, ref empty,
            ref empty, ref empty, ref empty, ref empty, ref empty, ref empty,
            ref empty, ref empty, ref empty, ref empty, ref empty);

        app.Quit(ref rfalse, ref empty, ref empty);
    }

 


Вот об этом примере шла речь?

Да, мне нужно полностью сохранять структуру документа. Текст, рисунки, таблицы. Просто хранить его мне нужно именно в базе, а не на винте.


Это сообщение отредактировал(а) Loiste - 9.3.2006, 09:17
PM MAIL   Вверх
Exception
Дата 9.3.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Ну дык прекрасно (как будет время, добавлю в FAQ)! Что осталось непонятным?
PM   Вверх
Loiste
Дата 9.3.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 28.9.2005

Репутация: нет
Всего: нет



Непонятно, почему на строке №42: targetDoc.Application.Selection.Paste(); выскакивает ошибка "Ошибка команды".
Если же я дохожу до строки, где данные помещаются в буфер. Потом вручную открываю новый документ Word. У меня видно, что в буфере что-то есть, но если я пытаюсь вставить эти данные в документ он мне пишет, что буфер пуст или содержит неверные данные!

Вот это непонятно smile
PM MAIL   Вверх
Loiste
Дата 9.3.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 28.9.2005

Репутация: нет
Всего: нет



Сделала по-другому smile
Теперь работает.
PM MAIL   Вверх
Exception
Дата 9.3.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



А поделиться с другими smile ?
PM   Вверх
Loiste
Дата 9.3.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 28.9.2005

Репутация: нет
Всего: нет



Конечно, просто, кушать очень хотелось)))

Я сделала вот так:

//адрес читаемого файла


Код

Dim strDocumentFullName As String
strDocumentFullName = "Новый.doc"



//определяем размер читаемого файла

Код

Dim oFile As System.IO.FileInfo
oFile = New System.IO.FileInfo(strDocumentFullName)
Dim oFileStream As System.IO.FileStream = oFile.OpenRead()
Dim intTotalBytes As Int32 = oFileStream.Length
oFileStream.Close()

//читаем файл в байтовый массив и затем конвертируем в строку

Код

Dim BR As New IO.BinaryReader(IO.File.OpenRead(strDocumentFullName))
Dim bArray(intTotalBytes) As Byte
bArray = BR.ReadBytes(intTotalBytes)
Dim strBuffer As String
strBuffer = System.Text.Encoding.Default.GetString(bArray)
BR.Close()


//читаем инфу из строки в байтовый массив и затем записываем в файл

Код

Dim Writer As IO.BinaryWriter
Writer = New IO.BinaryWriter(IO.File.Create("New.doc"))
Dim bArray2 As Byte()
bArray2 = System.Text.Encoding.Default.GetBytes(strBuffer)
Writer.Write(bArray2)
Writer.Flush()
Writer.Close()


Решение не мое - нашла на какой-то странице, плюс кое-что взяла с другой страницы и еще один момент мне подсказали))
Добавлено @ 14:57
Да, но только. Это решение для целого документа. А не подскажете как мне записать в байтовый массив отдельно прочитанный абзац - paragraph.range ?
Добавлено @ 15:06
А с этим примером, через буфер, что там с этой ошибкой делать? Я выше описала проблему.
PM MAIL   Вверх
Exception
Дата 9.3.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Вот этот код помещает в буфер обмена содержимое первого параграфа в виде RTF:
Код

        Dim _wdApplication As New Microsoft.Office.Interop.Word.Application 'Приложение Word
        Dim _wdDocument As Document = _wdApplication.Documents.Open("E:\Word.doc") 'Документ Word
        _wdDocument.Paragraphs(1).Range.Copy() 'Копируем первый параграф
        Console.WriteLine(Clipboard.GetData("Rich Text Format")) 'Получаем его в виде RTF
        _wdApplication.Quit(True)

PM   Вверх
Loiste
Дата 10.3.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 28.9.2005

Репутация: нет
Всего: нет



Я не о том smile
Как его в поток загнать? Параграф этот..

Да и я уже говорила, что в том примере с буфером обмена у меня ошибка выскакивает.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0994 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.