開発環境:
Windows10 Pro
Visual Studio Community 2019
開発言語:
VB.NET FrameWork4.7.2
帳票出力をエクセルに出力しているアプリが結構あります。
ライセンス上の問題もあり推奨はしていません。
出来ればLibreOfficeへの変更をお願いしていますが、
なかなか移行していただけません。
アプリの修正費用もそこそこ掛かりますので・・・。
この間,Windows Update「20H2」やテレワークの関係で、「エクセルが起動できない!」とか「エクセルが開かない!」とかで、お声がかかります。
たいがいは、そもそもエクセルが入っていないとか、エクセルのアクティベートをしていないとかが多いのですが、壊れていてVB.NETのアプリから呼んだ時に、「ActiveX コンポーネントを作成できません。」エラーとなる場合があります。
エクセルの再インストールやアクティベイトをする必要がありますが、ユーザさんの領域なので、そこには手出しできません。
対応としては、出力先をエクセルからCSV出力に変更するようにしました。 CSVだと何かしら読めるものがPCには入っていると思いますので。
メインの処理(VB)
If Not fncURI_XLS() Then 'エクセル作成処理に失敗したので、 'CSVを作成する。 If fncURI_CSV() Then ProgressBar1.Value = 3 Exit Sub End If Throw New Exception("処理は不正終了します。") End If
エクセル作成処理(VB)
Public Function fncURI_XLS() As Boolean Dim xlApp As Object Dim xlBook As Object Dim XLSHEET As Object Try xlApp = CreateObject("Excel.Application") xlBook = xlApp.Workbooks.Add XLSHEET = xlBook.Worksheets(1) ''~処理 Return True Catch ex As Exception Return False Finally XLSHEET = Nothing xlBook = Nothing xlApp = Nothing End Try End Function
CSV作成処理(VB)
Public Function fncURI_CSV() As Boolean Try '保存先 Dim csvPath As String = "..\売上リスト.csv" 'エンコード指定 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("Shift_JIS") ''~処理 ’メッセージ MessageBox.Show("エクセルが使用不能です。" & vbCrLf & "CSVを出力しました。", My.Application.Info.Title) 'CSVを開く Using p As System.Diagnostics.Process = _ System.Diagnostics.Process.Start(csvPath) End Using Return True Catch ex As Exception Throw ex End Try End Function
これでエクセルが使用できなかった場合は、CSVの出力するようになります。
複数シートを使わないのであれば、CSVでも不便さを感じることはありません。
インストールされているエクセルの不具合があって、.NETからエクセルが操作できないけれど、Excel自体は普通に使える。
或いはExcel以外のxlsxファイルが読めるプログラムがインストールされている場合は、ClosedXMLを使用するのがよさそうです。
下記リンクを参考にしてください。
xlsx形式のファイルの出力