我正在编写一个模块,用于将DataTable导出到Excel,Microsoft.Office.Interop.Excel但在开始认真之前,我想让基本工作正常工作:打开文件,另存为,关闭.
我已成功打开并保存扩展名为.xls的文件,但使用.xlsx扩展名保存不起作用.它写.xlsx文件,但当我尝试打开它时,我收到以下错误:
Excel无法打开文件'SomeFile.xlsx',因为文件格式无效.验证文件是否已损坏,文件扩展名是否与文件格式匹配.
我用来打开,保存和关闭文件的代码是:
Excel.Application excelApplication = new Excel.Application();
//excelApplication.Visible = true;
//dynamic excelWorkBook = excelApplication.Workbooks.Add();
Excel.Workbook excelWorkBook = excelApplication.Workbooks.Add();
//Excel.Worksheet wkSheetData = excelWorkBook.ActiveSheet;
int rowIndex = 1; int colIndex = 1;
excelApplication.Cells[rowIndex, colIndex] = "TextField";
// This works.
excelWorkBook.SaveAs("C:\\MyExcelTestTest.xls", Excel.XlFileFormat.xlWorkbookNormal,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false,
Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value);
// This does not!?
excelWorkBook.SaveAs("C:\\MyExcelTestTest.xlsx", Excel.XlFileFormat.xlWorkbookNormal,
System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false,
Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value);
excelWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);
Run Code Online (Sandbox Code Playgroud)
我也尝试了文件格式Excel.XlFileFormat.xlExcel12代替,Excel.XlFileFormat.xlWorkbookNormal但这甚至没有写,而是抛出COMException:
来自HRESULT的异常:0x800A03EC
解决这个问题的任何帮助都将非常受欢迎.
编辑:我现在也尝试过: …
我是初学者使用Microsft.ACE.OLEDB 12.0.我创建了一个Winforms应用程序VS 2010.
并创建一个函数,用于将数据网格数据导出到MS Access文件.我使用的是Microsoft Oledb
用于将数据网格数据导出到MS Access文件.但是当我尝试导出时出现此错误
该
数据到ms访问.
请看下面的图片.

我还在我的应用程序中引用了Microsoft.Office 12.0对象库.

批量构建配置

我有重绘WPF控件的问题.
WPF控件作为Windows窗体的ElementHost.Child添加.
当Windows 7进入节电模式并恢复正常时(通过在键盘上移动鼠标或按键),其余的Windows表单控件将重新绘制,但WPF部分不会重新绘制(并且Win 7背景在该地区).
在最小化和最大化应用程序时,WPF部分被重新绘制.
有人对这个问题有任何想法吗?
有没有一种实用的方法让我们慢慢将WinForms应用程序演变为WPF,而不会为奇怪的互操作场景创建支持梦魇?
背景资料:
我们有一个庞大的战舰灰色WinForms应用程序,大约60-75个用户的内部组使用.我们开始遇到可以看到在WPF中使用应用程序带来好处的地方,但这还不足以证明大型项目完全重写它的合理性.应用程序中的所有屏幕都是自包含的WinForms用户控件,而WinForms应用程序只是一个处理菜单,打开/关闭表单,提供一些共享帮助方法等的shell ...
到目前为止,我们最好的想法是将shell应用程序转换为WPF,然后在其中托管WinForms用户控件.我们认为我们可以随着时间的推移转换用户控件,将这些更改与具有足够业务价值的计划相结合,以支持额外的工作.我担心互操作性能如何以及它将如何影响性能.我也关注我们如何过渡到应用程序的新外观.让shell应用程序看起来很时髦,然后在其中托管旧的战舰灰色用户控件似乎很奇怪,在WPF中创建shell应用程序并使其看起来就像在WinForms中一样.
如果其中一个Caliburn,Prism或其他类似的框架可以缓解过渡,我们也愿意探索这些选择.
我想要做的是向winform客户端添加一个"Email To ..."按钮,该客户端打开一个新的Outlook邮件窗口并附加一个文件,以便用户可以转发它.如果outlook还没有运行,我可以让outlook集成工作得很好.这是一个C#.NET 4.0 winforms应用程序,使用Outlook 14.0互操作库,在Windows 7 64位计算机上运行Outlook 2010 32位.由于其他原因,我已将应用程序编译为x86,因此我怀疑它是32/64位问题.这是我的代码:
// Connect to outlook and create a new mail item
var app = new Outlook.Application();
var ns = app.GetNamespace("MAPI");
var mailItem = (Outlook.MailItem)ns.Application.CreateItem(Outlook.OlItemType.olMailItem);
// create the mail item and attach the file
mailItem.To = "";
mailItem.Subject = "Emailing: " + Path.GetFileName(_currentFilePath);
mailItem.Attachments.Add(_currentFilePath, Outlook.OlAttachmentType.olEmbeddeditem);
// show the email dialog window
mailItem.Display(true);
Run Code Online (Sandbox Code Playgroud)
如果outlook没有运行,它可以完美运行.一旦打开,我在第一行尝试创建Outlook.Application对象时收到以下错误:
由于以下错误,检索具有CLSID {0006F03A-0000-0000-C000-000000000046}的组件的COM类工厂失败:80080005服务器执行失败(HRESULT异常:0x80080005(CO_E_SERVER_EXEC_FAILURE)).
任何想法会导致什么?这是某种版本的冲突吗?
email-integration ms-office office-interop outlook-object-model winforms-interop
我正在尝试从我自己的WinForm中的Windows任务栏显示地址工具栏.我可以得到地址toobar({01E04581-4EEE-11d0-BFE9-00AA005B4383})的CLSID ,我可以得到IDeskBand它的引用.但是......那又怎样?
Guid bandCLSID = new Guid("{01E04581-4EEE-11d0-BFE9-00AA005B4383}");
Type bandType = Type.GetTypeFromCLSID(bandCLSID);
IDeskBand deskband = (IDeskBand)Activator.CreateInstance(bandType);
Run Code Online (Sandbox Code Playgroud)
我试过托管它AxHost,但地址工具栏不是ActiveX控件.我试过打电话
(deskband as IOleObjectWithSite).SetSite(various interfaces);
Run Code Online (Sandbox Code Playgroud)
要么
(deskband as IDockingWindow).ShowDW(true);
Run Code Online (Sandbox Code Playgroud)
以及各种其他接口和他们的方法,但我做的任何事情似乎都没有让我到处.如果我真的能看到工具栏出现在任何地方,我会高兴的.但我似乎无法弥合IDeskBand引用和将其插入我的Windows窗体之间的差距.
有没有人试过这个,并且比我更进一步?
我有这样的WPF用户控件......
namespace WpfApplication1
{
public partial class MyControl : UserControl
{
......
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个win表单来包含这个WPF用户控件...
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ElementHost ctrlHost = new ElementHost();
ctrlHost.Dock = DockStyle.Fill;
WpfApplication1.MyControl win = new WpfApplication1.MyControl();
ctrlHost.Child = win;
this.Controls.Add(ctrlHost);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个父按钮,有一个按钮.单击该按钮将打开包含ElementHost的Form1.
namespace WindowsFormsApplication4
{
public partial class Parent : Form
{
public Parent()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{ …Run Code Online (Sandbox Code Playgroud) 我们有一个WinForms应用程序,我们正在逐步转换为WPF.此时应用程序的主窗体是一个Form(WinForm),它包含一个用WPF构建的垂直侧边栏.侧栏托管在ElementHost控件中.
在主窗体中,KeyPreview设置为true,我们重写OnKeyDown()以处理应用程序范围的键盘快捷方式.当侧边栏具有焦点时,键盘事件不会发送到OnKeyDown.
解决这个问题的正确方法是什么?
我尝试将datagridview数据导出到我的C#4.0 Windows应用程序中的excel文件.
我们使用了Microsoft.Office.Interop.Excel dll版本12.0.0.0.它运作良好,一切
很好.但是,当我尝试导出超过1000个datagridview记录时,它需要太长时间
时间.我怎样才能提高性能.
请参阅下面的Excel帮助程序代码.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;
using System.Runtime.InteropServices; // For COMException
using System.Reflection; // For Missing.Value and BindingFlags
using System.Diagnostics; // to ensure EXCEL process is really killed
namespace Export.Excel
{
#region InstanceFields
//Instance Fields
//public delegate void ProgressHandler(object sender, ProgressEventArgs e);
//public event ProgressHandler prg;
private System.Data.DataView dv;
private Style styleRows;
private Style styleColumnHeadings;
private Microsoft.Office.Interop.Excel.Application EXL;
private Workbook workbook;
private Sheets sheets;
private …Run Code Online (Sandbox Code Playgroud) 我有一个winforms usercontrol,在WPF控件中有多个按钮.
我的usercontrol以前托管在Windows窗体中,我能够这样做
this.ParentForm.AcceptButton = this.btnSearch;
Run Code Online (Sandbox Code Playgroud)
我正在尝试建立如何在usercontrol上执行类似操作,因为它在WindowsFormHost中.ParentForm属性为null.
理想情况下,我希望实现两件事.
非常感谢,克里斯
winforms-interop ×10
winforms ×7
c# ×5
wpf ×5
.net ×2
excel ×2
office-2007 ×2
interop ×1
ms-access ×1
ms-office ×1
wpf-controls ×1