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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужна помощь по Word+бд, положить документ Word в базу данных 
:(
    Опции темы
RedButterfly
Дата 2.9.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Учусь
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 4.7.2005
Где: Уфа->Москва

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



Поднимаю тему, уважаемые.
Мне нужно написать программу для работы с документами Word (текст+графика+макросы).
Есть   дерево TreeView где в узлах этого дерева части одного и того же документа.
И таких документов в дереве - много. Кликаешь на ветке и из базы данных грузится часть этого документа.

Сейчас я застряла на месте где нужно байты передать в базу данных.

Тут в одной теме был хороший пример mr.Duda
http://forum.vingrad.ru/forum/topic-80123/...ry621325/0.html
но даже при добавлении ссылок не компилируется :(

Вот работающий пример (компилируется при добавлении reference на "Microsoft Word 11.0 object library" и System.Windows.Forms):
Код

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


Для решения своей задачи нужно передать документ Word  в базу данных через поток байтов.

Как вы думаете что нужно исправить в вышеприведенной программе чтобы она заработала в 2005-й студии?

Может есть работающие примеры...
 smile 
PM MAIL ICQ Skype   Вверх
Idsa
Дата 2.9.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Насколько я понимаю, тот пример mr.Duda писал через Com-обертку. Это жутко неудобно. В качестве альтернативы предлагаю использовать сторонние библиотеки для работы с Word:
1. http://www.codeproject.com/KB/string/gioswordnetlibrary.aspx
2. http://www.independentsoft.de/word/index.html
Может, есть и другие библиотечки. Стоит поискать.

Вторая библиотека, насколько я понял, не является надстройкой над Com-оберткой, а сама парсит Word-документ. Поэтому она будет работать, даже если на компе не установлен Office. Правда, сама библиотека платная.

По какому принципу работает первая библиотека - не разбирался.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
MasterOfCode
Дата 2.9.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Если есть путь к файлу, то можно абстрагироваться от "документ MS WORD", и вставить в БД просто файл, это не сложно.


--------------------
user posted image
PM ICQ   Вверх
Idsa
Дата 2.9.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Похоже, я невнимательно прочитал вопрос. Я подумал, проблема в генерации word-документа, а, судя по всему, проблема в это сохранении в базу данных.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
RedButterfly
Дата 2.9.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Учусь
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 4.7.2005
Где: Уфа->Москва

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



Цитата(Idsa @ 2.9.2008,  13:30)
Насколько я понимаю, тот пример mr.Duda писал через Com-обертку. Это жутко неудобно. В качестве альтернативы предлагаю использовать сторонние библиотеки для работы с Word:
1. http://www.codeproject.com/KB/string/gioswordnetlibrary.aspx
2. http://www.independentsoft.de/word/index.html
Может, есть и другие библиотечки. Стоит поискать.

Вторая библиотека, насколько я понял, не является надстройкой над Com-оберткой, а сама парсит Word-документ. Поэтому она будет работать, даже если на компе не установлен Office. Правда, сама библиотека платная.

По какому принципу работает первая библиотека - не разбирался.

Спасибо за ссылку smile

Возможно в будущем пригодится  smile


Но мне нужен был пример того как документ ворд положить в байтовый поток , а потом в базу данных...

 документ Word нужно преобразовать в байт

наподобие byte[] bytesDoc = (byte[]) документ ворд....

Добавлено через 3 минуты и 15 секунд
Цитата(MasterOfCode @ 2.9.2008,  13:43)
Если есть путь к файлу, то можно абстрагироваться от "документ MS WORD", и вставить в БД просто файл, это не сложно.

Путь к файлу можно словить через ДиалоговоеОкноОткрытьФайл или при СозданиеНовогоФайла ...думаю.

Но сами документы нигде не должны храниться в виде файлов...такое условие поставили...
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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