2011-06-24 4 views
3

私のプロジェクト用のアプリケーションを開発していると思いますが、それは過去の試験を読み込み/紙(ワードファイル)を実行し、それに応じて、そのセクションで質問と画像を抽出し、質問と画像をデータベースに保存します。.docx/.docファイルからSQL Serverにデータを抽出する方法に関する提案が必要

ですから、単語ファイルからデータを抽出し、データベースに挿入する方法についていくつかの提案が必要です。この記事のプレビューは、この記事の最後です。現在、いくつかの方法がありますが、ファイルにバックグラウンドイメージのテキストボックスが含まれている場合、どのように実装できるかわかりません。質問はイメージとリンクしなければならない。

方法1(MSオフィス相互運用機能を使用してください)

  • ワードファイルをロード - 、>フォルダに保存 を抽出画像を - > .TXTとして保存テキスト、 を抽出 - >テキストを抽出

    • 私は秒を検出するにはどうすればよい:.TXT、その後から質問デシベル

    を保存質問と質問?

  • 画像を質問にリンクさせるにはどうすればよいですか? Wordファイルから

    private object missing = Type.Missing; 
    private object sFilename = @"C:\temp\questionpaper.docx"; 
    private object sFilename2 = @"C:\temp\temp.txt"; 
    private object readOnly = true; 
    object fileFormat = Word.WdSaveFormat.wdFormatText; 
    
    private void button1_Click(object sender, EventArgs e) 
    { 
        Word.Application wWordApp = new Word.Application(); 
        wWordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone; 
        Word.Document dFile = wWordApp.Documents.Open(ref sFilename, 
              ref missing, ref readOnly, ref missing, ref missing, 
              ref missing, ref missing, ref missing, ref missing, 
              ref missing, ref missing, ref missing, ref missing, 
              ref missing, ref missing, ref missing); 
    
        dFile.SaveAs(ref sFilename2, ref fileFormat, ref missing, ref missing, 
          ref missing, ref missing, ref missing, ref missing,ref missing, 
          ref missing,ref missing,ref missing,ref missing,ref missing, 
          ref missing,ref missing); 
        dFile.Close(ref missing, ref missing, ref missing); 
    } 
    

    抽出画像(テキストボックス内の画像上では動作しません):

    private Word.Application wWordApp; 
    private int m_i; 
    private object missing = Type.Missing; 
    private object filename = @"C:\temp\questionpaper.docx"; 
    private object readOnly = true; 
    
    private void CopyFromClipbordInlineShape(String imageIndex) 
    { 
        Word.InlineShape inlineShape = wWordApp.ActiveDocument.InlineShapes[m_i]; 
        inlineShape.Select(); 
        wWordApp.Selection.Copy(); 
        Computer computer = new Computer(); 
        if (computer.Clipboard.GetDataObject() != null) 
        { 
         System.Windows.Forms.IDataObject data = computer.Clipboard.GetDataObject(); 
         if (data.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap)) 
         { 
         Image image = (Image)data.GetData(System.Windows.Forms.DataFormats.Bitmap, true); 
         image.Save("C:\\temp\\DoCremoveImage" + imageIndex + ".png", System.Drawing.Imaging.ImageFormat.Png); 
         } 
        } 
    } 
    
    private void button1_Click(object sender, EventArgs e) 
    { 
        wWordApp = new Word.Application(); 
        wWordApp.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 missing, ref missing, 
               ref missing, ref missing, ref missing); 
        try 
        { 
         for (int i = 1; i <= wWordApp.ActiveDocument.InlineShapes.Count; i++) 
         { 
          m_i = i; 
          CopyFromClipbordInlineShape(Convert.ToString(i)); 
         } 
        } 
        finally 
        { 
         object save = false; 
         wWordApp.Quit(ref save, ref missing, ref missing); 
         wWordApp = null; 
        } 
    } 
    

    ワードファイル(ワーキング)から

抽出テキスト方法2

  • 解凍ワードファイル(.docxの) - >コピーメディア(画像)フォルダ、どこか店 - > XMLファイルを解析 - >テキストを格納デシベル

に任意の提案/ヘルプはいただければ幸いです:D

ワードファイルのプレビュー: Preview of the word file (バックアップリンク:http://i.stack.imgur.com/YF1Ap.png) - のOpenXML SDK

+3

あなたは**急いで** .NET 4にアップグレードし、最適化されたinteropコードを使用する必要があります! 'wWordApp.Documents.Open(ref sFilename、ref missing、ref readOnly、ref missing、ref missing、ref missing、ref missing、ref missing、ref missing、ref missing、ref missing、ref missing、ref missing、ref missing、ref紛失、欠落) '' wWordApp.Documents.Open(ref sFilename) 'になってしまいました - ' ref missing'はもうありません! –

+0

頭がおかげでありがとう、私は.net 4 asapにアップグレードします。 – DarkPP

答えて

0

答えは選択肢#3です。最初に、上記の選択をしたくない理由を説明しましょう。

  1. サーバー上でOfficeを実行することは悪い考えです。マイクロソフトは具体的に言わないと言います。それは遅く、例外を投げたり、物事を見つけることができない "問題"を打ちます。

  2. XMLファイルの解析は機能しますが、画像などが配置されている可能性のあるすべてのケースを見つけるXPathは機能します。おそらく、各セクションの終わりに来るセクションを反復し、セル内、テキストボックス内、配置済み、インラインなどすべてのケースを処理する必要があります。

あなたはOpenXMLのSDKで行く場合は、あなたが、その後の子孫を使用して画像(またはものは何でもあなたが必要)であるすべてのものを得ることができますLINQインターフェースを持っています。また、SectPrノードのセクションを提供するので、セクションを簡単に反復処理することができます。

関連する問題