2017-12-28 44 views
0

DataGridViewからexcel System.ComponentModel.Win32Exception: 'The specified executable is not a valid application for this OS platform.'にデータをエクスポートしようとすると、そのようなファイルが想定どおりに保存されます。 これは、私がreinstalledパッケージ全体をパッケージ化しているためだと思っていましたが、そうではありません。私のアプリケーションは、任意のCPU(32ビットまたは64ビット)上で実行されている、と私は現在、win10 64ビットのオペレーティングを実行していることをC:\\Users\\net\\Desktop\\Excel TESTING\\OperatorStatisticsData.xlsxデータをC#(winフォーム)でExcelにエクスポートするときのエラー

注:、ファイル名の値はProcess.Start(fileName)メソッドを呼び出すようにしようとしたとき

例外が発生しますシステム。 enter image description here この問題を解決する方法を教えてください。

+1

は私の謝罪を@mjwills、あまりにも多くの方法がありますが、私は情報を戦いましたパッケージを再インストールすることで十分でしょう。私の[編集](https://stackoverflow.com/q/48005685/7517846)の質問 – Yollo

+0

@mjwills '' C:\\ Users \\ net \\ Desktop \\ Excel TESTING \ \ OperatorStatisticsData.xlsx "' downvoteの必要はありません – Yollo

+0

@mjwillsはそれを試しましたが、私が言及したのと同じですが面白いことは、データが – Yollo

答えて

3

(必要性がにあれば変更パスを)直接EXCEL.EXEを呼び出すようにしてください:

string filePath = @"c:\Temp\export.XLSX"; 
// For me this generates: C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE 
var exec = System.IO.Path.Combine(
       Environment.GetEnvironmentVariable("ProgramW6432"), 
       "Microsoft Office", "Office14", "EXCEL.EXE"); 
Process.Start(fileName: exec, arguments: filePath); 

UPDATE

あなたは(他のプロパティの中で)取得するシェルAssocQueryString機能を使用して、実行可能ファイルを入手することができ、実行可能拡張に関連付けられたファイル。ここではそれを使用するC#の上の方法があります:

[Flags] 
public enum AssocF 
{ 
    Init_NoRemapCLSID = 0x1, 
    Init_ByExeName = 0x2, 
    Open_ByExeName = 0x2, 
    Init_DefaultToStar = 0x4, 
    Init_DefaultToFolder = 0x8, 
    NoUserSettings = 0x10, 
    NoTruncate = 0x20, 
    Verify = 0x40, 
    RemapRunDll = 0x80, 
    NoFixUps = 0x100, 
    IgnoreBaseClass = 0x200 
} 

public enum AssocStr 
{ 
    Command = 1, 
    Executable, 
    FriendlyDocName, 
    FriendlyAppName, 
    NoOpen, 
    ShellNewValue, 
    DDECommand, 
    DDEIfExec, 
    DDEApplication, 
    DDETopic 
} 

public static class FileAssocHelper 
{ 

    [DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Auto)] 
    static extern uint AssocQueryString(AssocF flags, AssocStr str, string pszAssoc, string pszExtra, [Out] StringBuilder pszOut, [In][Out] ref uint pcchOut); 

    public static string FileExtensionInfo(AssocStr assocStr, string doctype) 
    { 
     uint pcchOut = 0; 
     AssocQueryString(AssocF.Verify, assocStr, doctype, null, null, ref pcchOut); 
     StringBuilder pszOut = new StringBuilder((int)pcchOut); 
     AssocQueryString(AssocF.Verify, assocStr, doctype, null, pszOut, ref pcchOut); 
     return pszOut.ToString(); 
    } 

} 

今、私たちは、実行可能ファイルを検索することができ、オープンExcelファイル:

string filePath = @"c:\Temp\Results.xlsx"; 
string exec = FileAssocHelper.FileExtensionInfo(AssocStr.Executable, ".xlsx"); 
Process.Start(exec, filePath); 
+0

のように保存されていることです。あなたは:D、私の "Excel.EXE"が "PrgoramFiles(x86)"にあることに気付いて、 'Environment.GetEnvironmentVariable(" ProgramFiles(x86) ")のパスを変更しました。 " Microsoft Office " "Office14"、 "EXCEL.EXE"); ' – Yollo

+0

私は動的に "EXCEL.EXE"パスを取得する方法はありますか? – Yollo

+1

@Yolloうれしかったよ!私は動的にEXCEL.EXEを探すことを考えましたが、今は具体的に何かを伝えることはできません。私が解決策を見つけたら、私は答えを更新します。 :) – JohnyL

関連する問題