在c#中将数据导出到Excel时出错(获胜表单)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c#中将数据导出到Excel时出错(获胜表单)相关的知识,希望对你有一定的参考价值。

当试图将数据从DataGridView导出到excel时,System.ComponentModel.Win32Exception: 'The specified executable is not a valid application for this OS platform.'异常被抛出,有趣的是该文件被保存为应该如此。我认为这是因为我为整个解决方案打包reinstalled,但事实并非如此。

尝试调用Process.Start(fileName)方法时发生异常,其中fileName的值为:C:Users etDesktopExcel TESTINGOperatorStatisticsData.xlsx

请注意,我的应用程序在任何CPU(32或64位)上运行,我目前正在运行win10 64位操作系统。 enter image description here有任何建议如何解决这个问题?

答案

尝试直接调用EXCEL.EXE(如果需要,更改路径):

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

UPDATE

您可以使用Shell 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:TempResults.xlsx";
string exec = FileAssocHelper.FileExtensionInfo(AssocStr.Executable, ".xlsx");
Process.Start(exec, filePath);

以上是关于在c#中将数据导出到Excel时出错(获胜表单)的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#windows应用程序中将数据表导出到excel [重复]

在C#中将Excel文件插入数据库

c#中将datagridview中数据导出到excel中,点击保存可以保存,点击取消就出

ASP.NET 导出EXCEL时如何不把一些不是EXCEL的符号一起导出到EXCEL?

在 s-s-rs 2008 中将报告导出到 excel 时合并或空白列

为啥将数据导出到 Excel 时日期格式会发生变化?