C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

EXCEL → CSV


(過去ログ 2 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■1258 / inTopicNo.1)  EXCEL → CSV
  
□投稿者/ よしまる 二等兵(3回)-(2005/09/06(Tue) 12:06:03)

分類:[VB.NET] 


分類:[VB.NET] 

2005/09/06(Tue) 12:07:52 編集(投稿者)
2005/09/06(Tue) 12:07:41 編集(投稿者)

いつもお世話になります。
今回の開発で、EXCELデータをCSVファイル変換する作業を
行っているのですが、ごくまれに、エラーが発生してします。
エラー箇所はファイル保存処理を行っているところです。

テストデータと本番データとの相違は、レコード件数のみです。
テストは200件 本番は1000件 位です。

お知恵をお貸し下さい。

ちなみに、http://support.microsoft.com/default.aspx?scid=kb;ja;JP414107
も参照しました。

Private Sub ExcelToCsv(ByVal FilePaht As String, ByVal i As Integer, ByVal NM As String)

Dim exl As Object 'EXCELの宣言
Dim FPN As String 'ファイルパス
Dim STR As String 'ファイル名

Try
FPN = FilePaht

exl = CreateObject("Excel.Application")

'Excel(の画面表示)
exl.Visible = False
'Excel(のメッセージ)
exl.Application.DisplayAlerts = False
'Excel(のオープン)
exl.Application.Workbooks.Open(FileName:=FPN)
'後処理の事も考えて、専用フォルダを作成しとく
Directory.CreateDirectory(System.IO.Path.GetTempPath() & "ExcelToCsv")
'EXCELの保存 ファイルフォーマット 42:タブ区切CSV 43:EXL 44:XML
exl.ActiveWorkbook.SaveAs(Filename:= _
STR, FileFormat:=42, CreateBackup:=False)
Catch Ex As Exception
MessageBox.Show(Ex.ToString, MyBase.Text & " : " & Ex.TargetSite.GetCurrentMethod.Name, MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
exl.Quit()
NAR(exl)
End Try

End Sub

0
引用返信 編集キー/
■1262 / inTopicNo.2)  Re[1]: EXCEL → CSV
□投稿者/ みゃみゅ玉子 少将(64回)-(2005/09/06(Tue) 12:41:12)
みゃみゅ玉子 さんの Web サイト

分類:[VB.NET] 

みゃみゅ玉子です。

No1258に返信(よしまるさんの記事)
> 今回の開発で、EXCELデータをCSVファイル変換する作業を
> 行っているのですが、ごくまれに、エラーが発生してします。
> エラー箇所はファイル保存処理を行っているところです。

エラーの内容を書いてください。
そうしないと、回答者が「何のエラーが出るのか」を確認するまで実行しなければなりませんよね?
そこまでしてくれる回答者がいるのかな?っていうのも考えると、エラーの内容を出したほうが回答がつきやすくなります。
# まあ、「エラーが出ます!」で終わりにしたくなる気持ちもわからなくもないのですが・・・(^^;

> テストデータと本番データとの相違は、レコード件数のみです。
> テストは200件 本番は1000件 位です。

どちらでエラーが発生しますか?
例えば、テストデータだとだいたい5回に1回の確率で発生して、本番データはだいたい3回に1回の確率で発生するとか。
テストデータならば、おそらくデータを変更してしまってもいいと思うので、テストデータの200件をコピペして1000件にしたら、同じ確率まで上がったとか。
さらに2000件にしたらもっとエラー発生率が上がったとか。
ここまでやっても発生率が変わらなければ、データの内容の可能性を疑ったりとか・・・

そのあたりを確認してみましたか?

# 5回に1回だとごくまれではないですね・・・

> ちなみに、http://support.microsoft.com/default.aspx?scid=kb;ja;JP414107
> も参照しました。

てことは、環境は
・Windows 9x 環境で使用している  
・Internet Explorer 4.0 以降のバージョンがインストールされている
・Excel 2000を使ってる
って思っていいですか?
# プログラムを見てみると、セルを参照していない気がするのですが・・・(^^;

ちょっと厳しく書いてしまったかもしれませんが、ごくまれに発生するエラーの場合は、かなり情報を提供しないと回答者が回答できません。
必ず出るようなエラーであれば、一部のソースを公開するだけでもわかることがあるんですけどね。


0
引用返信 編集キー/
■1263 / inTopicNo.3)  Re[1]: EXCEL → CSV
□投稿者/ 魔界の仮面弁士 准尉(26回)-(2005/09/06(Tue) 12:44:40)

分類:[VB.NET] 

> NAR(exl)
これが何を意味しているのか、質問文からは読み取れませんでした。
# 名前に特徴があるので、検討は付きますけど。(^^;

あと、Applicationプロパティがあちこちで使われているようですが、
今回は無意味なので、使わない方が良いでしょう。ActiveWorkbookもNGです。

> ちなみに、http://support.microsoft.com/default.aspx?scid=kb;ja;JP414107
> も参照しました。
それは旧VB向けの資料なので、そのまま VB.NETに持ってくると破綻しますよ。
こちらを参考に、オブジェクトの解放処理を正しく組み込みましょう。
http://support.microsoft.com/default.aspx?scid=kb;ja;317109
http://www.bcap.co.jp/hanafusa/dotnet/Excel08.htm


0
引用返信 編集キー/
■1265 / inTopicNo.4)  Re[2]: EXCEL → CSV
□投稿者/ よしまる 一等兵(5回)-(2005/09/06(Tue) 13:04:18)

分類:[VB.NET] 

2005/09/06(Tue) 14:28:31 編集(投稿者)
2005/09/06(Tue) 14:19:03 編集(投稿者)

現象記入漏れ、申し訳ございません。

エラーメッセージは、【呼び出し先が、呼び出しを拒否しました】
です。
また、STRの内容も表記漏れしていました。
STR = System.IO.Path.GetTempPath() & "ExcelToCsv\" & NM & "(" & i & ")" & ".csv"

エラーの回数は、前者の200件は、0回
後者は20回に1度位です。
テストファイルは、エラーの発生する2000件のデータを分割したものと
分割していないもので行いました。

それと、魔界の仮面弁士の発言で気づきましたが、今回の開発は、
VB.NETなので、使用しようとした、私が誤っていました。
申し訳ございません。

もう少し、テストしてみます。

PS:魔界の仮面弁士氏が記載したURLをたどって
http://www.bcap.co.jp/hanafusa/dotnet/Excelflm.htm
に入ってみました。

VB.2002とVB.NET2003では、コードの記述に相違はありますか?
試したところ、EXCELの宣言で、
Dim xlApp As New Excel.Application と書かれていましたが、
Dim xlApp As New Excel._ExcelApplication()としかかけませんでした。



0
引用返信 編集キー/
■1277 / inTopicNo.5)  Re[3]: EXCEL → CSV
□投稿者/ 魔界の仮面弁士 准尉(27回)-(2005/09/06(Tue) 22:52:53)

分類:[VB.NET] 

> Dim xlApp As New Excel.Application と書かれていましたが、
> Dim xlApp As New Excel._ExcelApplication()としかかけませんでした。

アンダーバー付きの方は、(COMの)インターフェイスでしょうね。

ところで、参照設定しているアセンブリはPIAでしょうか?
VS.NETで自動生成されるCOM相互運用機能アセンブリも含め、
標準のOffice PIA以外は、すべて非公式扱いとなるそうですよ。

http://support.microsoft.com/kb/328912/
http://support.microsoft.com/kb/304661/
http://www.microsoft.com/japan/msdn/library/ja/jpstagsdk/html/stconWhatArePIAs.asp

0
引用返信 編集キー/
■1290 / inTopicNo.6)  Re[4]: EXCEL → CSV
□投稿者/ よしまる 一等兵(7回)-(2005/09/07(Wed) 15:57:31)

分類:[VB.NET] 

魔界の仮面弁士さんのご指摘ですが、私の使用しているEXCELのオブジェクトが
古いためでした。
今現状はこのように修正しました。


'後処理の事も考えて、専用フォルダを作成しとく
Directory.CreateDirectory(System.IO.Path.GetTempPath() & "ExcelToCsv")

Dim xlApp As New Excel.Application()
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
Dim xlFilePath As String = FilePaht
'1000o秒待機
System.Threading.Thread.Sleep(1000)
Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
'1000o秒待機
System.Threading.Thread.Sleep(1000)
Dim xlSheet As Excel.Worksheet = xlSheets.Item("車両マスタ")
Dim xlCsv As Excel.XlFileFormat = Excel.XlFileFormat.xlCSV
Dim STR As String
Dim xxx As Integer


STR = System.IO.Path.GetTempPath() & "ExcelToCsv\" & NM & "(" & i & ")" & ".csv"

xlApp.Visible = False
xlApp.DisplayAlerts = False

Try
'1000o秒待機
System.Threading.Thread.Sleep(1000)
'EXCELファイルをCSVファイルで保存
xlSheet.SaveAs(STR, xlCsv)
'ファイル生成確認処理
For xxx = 0 To 10
If System.IO.File.Exists(STR) = True Then
Exit For
End If
System.Threading.Thread.Sleep(1000)
Next
Catch Ex As Exception
MessageBox.Show(Ex.ToString, MyBase.Text & " : " & Ex.TargetSite.GetCurrentMethod.Name, MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
NAR(xlSheet)
NAR(xlSheets)
xlBook.Close(False)
NAR(xlBook)
NAR(xlBooks)
xlApp.Quit()
NAR(xlApp)
End Try

現状も、【呼び出し先が、呼び出しを拒否しました】と表示されます。
とりあえず、ファイルIOをしている直前にSLEEP処理を実行して、
どこがだめなのか探しているのですが、
DIMで宣言するところ、全てが、エラーの対象になってしまっている
現状です。


0
引用返信 編集キー/
■1291 / inTopicNo.7)  Re[5]: EXCEL → CSV
□投稿者/ よしまる 一等兵(8回)-(2005/09/07(Wed) 16:16:18)

分類:[VB.NET] 

報告です。

ちなみに、投稿の1番目で書いたコード方法に、SLEEP処理を
入れて実行したころ、
エラー回数は100回中0回でした。

Dim exl As New Excel.Application() 'EXCELの宣言
Dim FPN As String 'ファイルパス
Dim STR As String 'ファイル名
'後処理の事も考えて、専用フォルダを作成しとく
Directory.CreateDirectory(System.IO.Path.GetTempPath() & "ExcelToCsv")

Try
FPN = FilePaht
STR = System.IO.Path.GetTempPath() & "ExcelToCsv\" & NM & "(" & i & ")" & ".csv"
'EXCEL の画面表示
exl.Visible = False
'EXCEL のメッセージ
exl.Application.DisplayAlerts = False
'EXCEL のオープン
exl.Application.Workbooks.Open(FileName:=FPN)
'1000 ミリ秒 (1秒) 待機する
System.Threading.Thread.Sleep(1000)
'EXCELの保存 ファイルフォーマット 42:タブ区切CSV 43:EXL 44:XML
exl.ActiveWorkbook.SaveAs(Filename:=STR, FileFormat:=42, CreateBackup:=False)
Catch Ex As Exception
MessageBox.Show(Ex.ToString, MyBase.Text & " : " & Ex.TargetSite.GetCurrentMethod.Name, MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
exl.Quit()
NAR(exl)
End Try

0
引用返信 編集キー/
■1327 / inTopicNo.8)  Re[6]: EXCEL → CSV
□投稿者/ よしまる 一等兵(9回)-(2005/09/13(Tue) 12:57:27)

分類:[VB.NET] 

みなさんありがとうございました

投稿1291を修正して無事、コーディング・テストを終え、
リリースできました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -