在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位操作系统。 有任何建议如何解决这个问题?
尝试直接调用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#中将datagridview中数据导出到excel中,点击保存可以保存,点击取消就出
ASP.NET 导出EXCEL时如何不把一些不是EXCEL的符号一起导出到EXCEL?