我有一个从用 VSTO 编写的 Excel 加载项生成的表单。我希望表单始终保留在 Excel 电子表格上方,但仍允许用户与其下方的工作表进行交互。
表单构造函数包括this.TopLevel = true;,但当我选择一个单元格时,表单仍然消失在电子表格后面。
有其他人遇到过这个问题并找到解决方法吗?
DCOM 配置中不存在“Microsoft Excel 应用程序”条目(在 32 位和 64 位中都尝试过)。我怎样才能让它显示在那里?我安装了 Microsoft Office。
如何将 Microsoft Office Inter-op 与 Azure 应用服务结合使用 Microsoft Office Inter-op 在 Azure 应用服务中是否正常工作。如果是,请告诉我。
我正在使用VS 2010并致力于将我们的应用程序升级到.NET 4.该应用程序是以Excel为基础构建的,我们希望利用.NET的一些改进来使用Excel.但是我遇到了一个奇怪的错误,这个错误似乎是在通用字典中使用Excel Interop对象引起的.这是生成的错误:
C:\MyApp\TheAssembly\MyClass.cs(823,57):
error CS1769: Type 'MyApp\OtherAssemply.IMyController.SheetReports' from assembly 'c:\MyApp\OtherAssemply.\bin\Debug\OtherAssembly.dll'
cannot be used across assembly boundaries because it has a generic type
parameter that is an embedded interop type.
Run Code Online (Sandbox Code Playgroud)
这是有问题的实际属性:
Dictionary<Excel.Worksheet, IReportSheet> SheetReports { get;}
Run Code Online (Sandbox Code Playgroud)
我们无法在通用对象中使用Interop对象吗?如果是这样,这是.NET 4.0中的严重限制.我尝试将Embed Interop属性设置为false,但这似乎没有改变任何东西.如果有任何解决方法,请告诉我.
是否可以从Microsoft.Office.Interop.Excel.ApplicationClass确定Excel是以32位还是64位运行?
编辑
该解决方案应适用于Excel 2010和Excel 2007
我的工作表有很多表.我需要特别操纵一个.当然,我可以简单地查看它的单元格数并逐个单元地操作它,但是有没有"get"函数以编程方式"获取"表格?
如果是这样,那我怎么操纵细胞呢?是否有命令"获取"整个标题,或整个列的标题(而不是其列号)/
如果有人知道解释这个的指南,那就足够了.我尝试使用谷歌搜索它,但所有结果都是关于数据库表,即从数据库填充电子表格.
我试图打开(或创建一个新的xls)Excel文件并为其写一些值.虽然,如果我只是创建一个新的xls文件,下面的程序工作得很好,我遇到了一些问题
**mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);**
Run Code Online (Sandbox Code Playgroud)
这是错误:无法访问"LOG.xls".该文件可能已损坏,位于未响应的服务器上,或者只读.它不是只读的,它没有被破坏(因为有时文件是在运行时创建的).那有什么问题呢?
private static Microsoft.Office.Interop.Excel.Workbook mWorkBook;
private static Microsoft.Office.Interop.Excel.Sheets mWorkSheets;
private static Microsoft.Office.Interop.Excel.Worksheet mWSheet1;
private static Microsoft.Office.Interop.Excel.Application oXL;
private void btnSignIn_Click ( object sender, EventArgs e )
{
string path = "D:\\LOG.xls";
if(!File.Exists(path))
{
File.Create (path);
}
oXL = new Microsoft.Office.Interop.Excel.Application ();
oXL.Visible = true;
oXL.DisplayAlerts = false;
//error on this line
mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, …Run Code Online (Sandbox Code Playgroud) 我已经看过很多文章和问题,关于如何确保Excel实际上在你想要的时候退出并且这个过程不能保持活力.这是一篇描述该问题的知识库文章和Microsoft推荐的解决方案.实质上:
'close files
'Quit Excel
xlApp.quit()
'Release and collect garbage
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp)
GC.Collect()
GC.WaitForPendingFinalizers()
Run Code Online (Sandbox Code Playgroud)
很多人不建议杀死这个过程; 请参见 如何正确清理Excel互操作对象 和了解.net中的垃圾收集
另一方面,许多人不建议使用GC.Collect.请参阅使用GC.Collect()有什么错误?
根据我的经验,杀死该过程是确保Excel消失的最快速,最简单的方法.我的代码只会杀死它启动的确切进程,而不会杀死其他进程.我确保关闭所有打开的工作簿,退出应用程序并释放xlApp对象.最后,我检查过程是否仍然存在,如果是,那么杀死它.
<System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, _
ByRef lpdwProcessId As Integer) As Integer
End Function
Sub testKill()
'start the application
Dim xlApp As Object = CreateObject("Excel.Application")
'do some work with Excel
'close any open files
'get the window handle
Dim xlHWND As Integer = xlApp.hwnd
'this will have the process ID …Run Code Online (Sandbox Code Playgroud) 我编写了以下简单的C#控制台应用程序来导出Excel工作簿中的所有图表.它工作得很好,除非打开文档后没有滚动到图表,在这种情况下会生成一个空图像文件.
using Excel = Microsoft.Office.Interop.Excel;
using System;
using System.Diagnostics;
namespace ExcelExporter
{
class ChartExporter
{
const string EXPORT_TO_DIRECTORY = @"C:\Users\Sandy\Desktop\Excel\Charts";
static void Main(string[] args)
{
Excel.Application app = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Microsoft.Office.Interop.Excel.Application;
ConsoleColor c = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("Export To: ");
Console.ForegroundColor = c;
string exportPath = Console.ReadLine();
if (exportPath == "")
exportPath = EXPORT_TO_DIRECTORY;
Excel.Workbook wb = app.ActiveWorkbook;
foreach (Excel.Worksheet ws in wb.Worksheets)
{
Excel.ChartObjects chartObjects = (Excel.ChartObjects)(ws.ChartObjects(Type.Missing));
foreach (Excel.ChartObject co in chartObjects)
{
Excel.Chart chart = …Run Code Online (Sandbox Code Playgroud) 我可以使用Range.AddComment方法以编程方式在C#中向Excel单元格添加注释:
range.Cells[1, 1].AddComment("Hello World!");
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要添加的一些评论很长.在我的测试过程中,无论评论有多长,评论框似乎都保持默认大小.这意味着用户在最初单击单元格时无法看到所有注释.
有没有一种方法可以用来更好地控制注释的显示方式,这样我可以避免这个问题?
excel-interop ×10
c# ×7
excel ×5
.net ×2
.net-4.0 ×1
32bit-64bit ×1
azure ×1
com-interop ×1
dcom ×1
export ×1
interop ×1
vb.net ×1
vsto ×1
winforms ×1