2017-09-19 11 views
-2

ここに誰かが欲しいと願っています。私はStackOverflowで他の多くの同様の質問を読んだが、私にはうまくいく答えが見つからなかった。'GDI +で一般的なエラーが発生しました。' Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)に画像を保存する

データをExcelレポートにエクスポートするコードがある。そのコードの一部は画像をコピーし、それをデスクトップ上に作成したばかりのフォルダに置きます。次に、そのイメージをExcelレポートに挿入します。データのエクスポートには2つの異なる方法があります。ユーザーは、一度に1つのアイテム、またはアイテムのプログラム全体をエクスポートできます。 1つのアイテムをエクスポートすると、アイテムIDを持つデスクトップ上にフォルダが作成され、そのフォルダにイメージが保存されます。プログラムをエクスポートするときに、フォルダはプログラムのデスクトップ上で折り畳まれ、別のフォルダがベンダ用のフォルダ内に作成され、ベンダー内の他のフォルダがアイテム用に作成されます。その後、画像はそのアイテムフォルダに保存されます。コードは

一般的なエラーは、プログラムをエクスポートする際の保存最初の画像の上に... GDI +

に発生した...唯一のアイテムをエクスポートするときにうまく動作しますが、エラーになります。アイテムのグループをエクスポートする

つの項目をされてエクスポートする際メソッドを呼び出すコード...

Rprt_ItemRFQ_Class.ExportRFQ(Itm_ItemIDCmb.Text, ItmKey, Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), ProgKey) 

コードが...

Dim SaveFold As String = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), ProgName, VendName) 
    My.Computer.FileSystem.CreateDirectory(SaveFold) 
    For Each RFQRow As DataRow In DS.RFQRequestForm.Rows() 
     Rprt_ItemRFQ_Class.ExportRFQ(RFQRow.Item("ItemID"), RFQRow.Item("ItmKey"), SaveFold, ProgKey) 

    Next 

コードがあると呼ばれています。 ...(SaveFoldがクラス変数である)

Public Shared Sub ExportRFQ(ItemID As String, ItmKey As Integer, StartPath As String, ProgKey As Integer) 

    SaveFold = IO.Path.Combine(StartPath, ItemID) 
    My.Computer.FileSystem.CreateDirectory(SaveFold) 

    "I have cut out all the code for creating and formatting the excel sheet as it is not relevent" 

    ImgLoad(ItmKey, ItemID) 


End Sub 

Public Shared Sub ImgLoad(ItmKey As Integer, ItemID As String) 

    GetPrimImg.Fill(DS.GetPrimImage, ItmKey) 

    Dim FileStr As String = DS.GetPrimImage.Rows(0).Item(0) 
    Dim NewPath As String = IO.Path.Combine(SaveFold, ItemID & ".jpg") 
    Dim fs As IO.FileStream 
    fs = New IO.FileStream(FileStr, IO.FileMode.Open, IO.FileAccess.ReadWrite) 
    Dim RFQImg As System.Drawing.Image = System.Drawing.Image.FromStream(fs) 
    RFQImg.Save(NewPath) 
    Dim Wid As Integer = IIf(RFQImg.Width = 450, RFQImg.Width * 0.53333, RFQImg.Width * 0.24) 
    Dim Hgt As Integer = IIf(RFQImg.Height = 450, RFQImg.Height * 0.53333, RFQImg.Height * 0.24) 
    RFQImg.Dispose() 
    fs.Close() 

    xlWorksheet.Range("T1").Select() 
    Dim P As Object = xlWorksheet.Pictures.Insert(NewPath) 
    With P 
     .Left = xlWorksheet.Range("T1").Left 
     .Top = xlWorksheet.Range("T1").Top 
     .Placement = ExcelVB.XlPlacement.xlMoveAndSize 
     .PrintObject = True 
     With P.ShapeRange 
      .LockAspectRatio = False 
      .Width = Wid 
      .Height = Hgt 
      .IncrementTop(3.333228) 
      .IncrementLeft(102.1872441) 
     End With 
    End With 

End Sub 

エラーがライン

に発生します。
RFQImg.Save(NewPath) 

私はEnvironment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)に渡した場合、それはうまく動作しますが、プログラムのエクスポートからSaveFoldとして何が渡されるかを変更しようとしたが、私は原因を渡し、他のファイル・パスしていますエラー。

+0

あなたはこれをどのようなコンテキストで実行していますか?あなたはサービス、Webページ、またはデスクトップアプリケーションですか? –

+0

画像を変更する必要がないため、画像を作成する必要はありません。 'File.Copy'は必要なものだけです(パスを作成する最も良い方法ではありません - Path.Combineも参照してください..)[ask]を読んで[ツアー]を取ってください – Plutonix

+1

あなたは動作するコードを投稿しました。 –

答えて

0

私はここでは馬鹿です。誰かがVendName変数のベンダー名を最後にスペース文字で保存しました。それが私がエラーを受けている理由です。私は変数にトリムを追加し、すべて今良いです。

関連する問題