Tag: excel interop

如何从Excel中获取图表并将其添加到Word使用Microsoft.Office.Interop?

我尝试用Microsoft.Office.Interop.Excel.Chart.Export()方法将图表导出为图像,但图像的质量很差(最好的结果是使用PNG格式)。 有没有办法如何设置图像的分辨率导出时只使用Microsoft.Office.Interop ? 另一方面,我的同事使用VBA,他可以直接从Excel(使用WinAPI)将图表导出为.emf文件,所以我尝试使用Microsoft.Office.Interop.Word.InlineShapes.AddPicture()方法包括它们, 但是它似乎不能直接包含.emf文件 。 有没有不同的,也许更好的方法来做到这一点? 更新:我不知道为什么我认为这是不可能包括.emf文件,但我仍然想要导出高分辨率图像。

如何创buildExcel工作表并将其添加到Excel InterOp中的多个工作簿

我一直在遵循以下模式,使用Excel InterOp创build多个工作表和多个工作簿。 现在,我需要创build一个叫做主工作簿的工作簿,它将包含我在原始工作簿中创build的工作表中的一些工作表。 举个例子,比方说WorkBook1有Sheet1和Sheet2,而Workbook2有Sheet3和Sheet4。 我希望主工作簿具有Sheet1和Sheet3。 我正在寻找一种方法来创build我为WorkBook1和WorkBook2创build的工作表(工作表1,工作表2,工作表3,工作表4),而且只需最less量的代码重复将工作表1和工作表3添加到主工作簿。 任何帮助将不胜感激。 For i = 1 To 10 Dim xlApp As Application = New Application Dim xlWorkBook As Workbook xlWorkBook = xlApp.Workbooks.Add Dim xlWorkSheet As Worksheet Dim xlSheets As Sheets = xlWorkBook.Sheets Dim xlNewSheet As Worksheet Dim sheetCount As Integer = 1 ' So I repeat the following block to […]

如何隐藏ExportAsFixedFormat的发布进度栏

我正在尝试使用interop.excel将Excel文件转换为PDF,同时在网站上执行ExportAsFixedFormat “发布”进度条。 有什么办法可以隐藏这个吗? 我发现这个问题的大小超过300KB的Excel文件。 代码如下: //(tried using Application instead of ApplicationClass) Microsoft.Office.Interop.Excel.ApplicationClass excelApplication = new Microsoft.Office.Interop.Excel.ApplicationClass(); excelApplication.ScreenUpdating = false; excelApplication.DisplayAlerts = false; excelApplication.Visible = false; if (excelWorkbook == null) { excelApplication.Quit(); excelApplication = null; excelWorkbook = null; return false; } var exportSuccessful = true; try { excelApplication.AlertBeforeOverwriting = false; excelWorkbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, outputPath); } catch (System.Exception ex) […]

为工作表与工作表分配名称

我在我的应用程序中使用“documentformat.openxml.spreadsheet.worksheet”。 如果我使用Sheet,我可以给它指定名称如下。 var sheet = new Sheet(); sheet.Name = "XYZ"; 如果我使用Worksheet,我无法指定名称。 如何将名称分配给工作表? var worksheet = new Worksheet();

使用BackgroundWorker将使Excel进程在closuresExcel后运行

我正在使用C#中的Excel加载项,在运行模拟时显示进度条。 我想要一个BackgroundWorkerasynchronous运行模拟,并报告进度条窗体的进度。 模拟方法需要对当前Excel COM应用程序的引用。 我有一个名为ThisAddin的类,它实现了ExcelDna.Integration.IExcelAddIn接口,并有一个返回应用程序的静态属性。 但是,只要后台工作人员以任何方式尝试使用该应用程序,即使退出Excel,也将使Excel进程继续运行。 例如,如果我简单地在Excel应用程序中设置属性,如下所示: void backgroundworker_DoWork(object sender, DoWorkEventArgs e) { ThisAddIn.App.DisplayStatusBar = true; } 然后,在运行加载和closures的Excel后,我仍然有一个Excel进程在我的任务pipe理器中运行。 有没有办法确保这个过程被杀死? 我不知何故在后台工作人员创build应用程序的另一个实例吗? 我不明白,因为如果我从后台工作人员的应用程序调用quit(),它将closures整个应用程序,该过程仍将继续运行! 当后台工作完成时,我已经确定调用dispose()并中止当前线程。 我已经使用了这里build议的“AbortableBackgroundWorker”类。 但是,这仍然不能解决我的问题。

范围在.Select()不工作在xlApp.ActiveWindow.FreezePanes

我只想selectA1到A3来冻结窗格。 但是xlApp.ActiveWindow.FreezePanes冻结A1到A10。 我正在试验3个小时这段代码是3个小时: xlApp.Range("A1:A3").Select() 但A1至A10仍然是冻结的细胞。 我只是想冻结A1到A3。 这可能吗? 我使用Visual Studio 2012和Excel 2013 这是我的代码: Imports System.Data.OleDb Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'AccessdbtestDataSet.country' table. You can move, or remove it, as needed. Me.CountryTableAdapter.Fill(Me.AccessdbtestDataSet.country) Dim con As New […]

用C ++或C#打开密码保护的Excel文件提示input密码,即使我已经传递了密码参数

我正在使用Microsoft.Office.Interop.Excel从我的C ++ / CLI程序中打开密码保护的Excel文件。 我提供了一个密码作为第五个参数。 当我运行我的程序时,Excel启动并打开我的文件,但它提示input密码。 请注意,该文件是密码保护,而不是工作表。 根据文档密码应该是types的对象,但提供作为文字也应该工作? using namespace System; using namespace Microsoft::Office::Interop::Excel; Microsoft::Office::Interop::Excel::Application^ exApp= gcnew Microsoft::Office::Interop::Excel::ApplicationClass(); String^ filename="e:\\test.xls"; Workbook^ wb = exApp->Workbooks->Open(filename, Type::Missing, Type::Missing, Type::Missing, "passw1", Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing, Type::Missing);

在C#中用模拟打开excel interop

是否有可能在C#中用模拟打开excel interop。 我想打开excel应用程序来运行C#程序运行的其他帐户以外的其他帐户。默认情况下,它将在运行C#程序的同一用户帐户下打开。 MyApp = new Excel.Application(); MyApp.Visible = false; MyApp.DisplayAlerts = false; MyBook = MyApp.Workbooks.Open(@"C:\Sample.xlsx"); 任何其他的方式来做到这一点也欢迎。

在Excel应用程序中将焦点从表单更改为input框

我已经在Excel中编写了一个范围selectinput框,但是我不能让Excel应用程序成为焦点,因此用户必须手动点击Excel工作簿才能看到input框,然后进行select,点击确定手动返回到表单。 有没有一种方法来编程改变焦点? 我试过了 xlapp.Application.Activate(); 并读了一堆,但找不到多less。 以下是我正在处理的内容: private void btnExcel_Click(object sender, EventArgs e) { Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); Excel.Workbook wkbk = null; wkbk = xlApp.ActiveWorkbook; Excel.Range address = xlApp.Application.InputBox("Select a Range", "Model Cutter 64", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 8); txtWkshtName.Text = address.Parent.Name; txtRange.Text = address.get_Address(address); } 我可以提供更多的代码,如果需要的话,但这个button是自包含的,不参考和其他代码。

是否有理由切换MSExcel.Excel.ApplicationClass.DisplayAlerts?

在我接pipe的一个项目中,我发现了这个代码: private MSExcel.Excel.ApplicationClass _xlApp; . . . _xlApp.DisplayAlerts = false; _xlApp.DisplayAlerts = true; 由于我不知道为什么MSExcel.Excel.ApplicationClass.DisplayAlerts会从false切换到true,而没有任何代码,所以我现在就把它保留下来,但是为什么这个切换是有益的或者是必须的呢?