Tag: office automation

如何编写用于VBA Excel的C#UDF的安装程序

基本上,我知道如何在C#中为VBA编写用户定义的函数( 这里 )我想写一个安装程序,它将执行必要的操作,以便在任何Excel文档中自动激活和引用我的* .tlb。 有关registry项或设置的任何信息将会有所帮助 编辑:以下我生成一个MyPj.tbl和一个MyPj.dll(感谢msbuild)。 [InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("afb62cb2-dfa8-4f0f-980b-25f96ad93b92")] public interface IGreeting { string SayHelloWorld { get; } } [ClassInterface(ClassInterfaceType.AutoDual)] [Guid("8cd91f78-4e62-4a12-95e0-df82699d4d75")] [ProgId("TestDll.Test")] public class Greeting : IGreeting { public string SayHelloWorld { get { return "Hello, World! "; } } } 通过将生成的.tbl添加到我在Excel中的项目(工具>参考…>浏览),我可以访问Excel VBMacro中的MyPj.Greeting Sub Test() Dim greeter as New MyPj.Greeting MsgBox greeter.SayHelloWorld() End Sub 重点是我不想通过“工具>参考…>浏览”。 我需要做一个安装程序,它会自动在Excel中提供“SayHelloWorld”

Excel 2013 C#互操作select范围不起作用

我将现有的C#程序从Excel 2003转换为Excel 2013(Office 365)。 它使用了excel interop界面。 该应用程序包含它自己的Interop.Excel.dll(v11.0.8161)的副本,即没有链接到安装在本地机器上的程序集。 它运行正常,因为它在安装了2013的计算机上,除了两种方法之外; Range.Select()和WorkBook.BreakLink()。 第一个抛出“select范围类失败的方法”和第二个“exception从HRESULT:0x800A03EC”exception。 用版本15.0.4641replaceinterop dll(来自Office 2013)没有任何区别,错误仍然存​​在。 代码片段如下: private Excel.Workbook NewWB; Excel.Worksheet lastSheet = (Excel.Worksheet)NewWB.Worksheets[NewWB.Worksheets.Count]; ((Excel.Range)lastSheet.Cells[1, 1]).Select(); Array links = NewWB.LinkSources(Excel.XlLinkType.xlLinkTypeExcelLinks) as Array; if (links != null) foreach (var l in links) NewWB.BreakLink((string)l, Excel.XlLinkType.xlLinkTypeExcelLinks); 有谁知道为什么只有这两种方法会失败,否则应用程序的工作; 它加载多个工作簿,提取特定的工作表,然后将它们合并到一个新的工作簿? 从Microsoft文档中,这些方法仍然像以前一样工作。

Excel 2016可安装ISAM

我有一个访问2007年的应用程序,导出数据到Excel工作表,然后打开文件。 一个用户刚刚升级到2016年的Excel。当它试图导出文件,我得到'找不到可安装ISAM'的错误。 代码很简单,可以在任何其他计算机上运行,​​但是没有其他人比2010年更新。 我遵循Microsoft知识库文章中有关检查和重新注册ISAM文件的build议 – 它在那里,看起来很好。 我修复了办公室的灌输,那也没有做任何事情。 我的直觉说,需要有一个更新版本的指令导出 – 我使用Excel 2010的acSpreadsheetTypeExcel12Xml ,但Access 2007没有什么新的支持。 我没有Excel 2016的版本来testing,但我可以不时地上电脑。 另外,如果可能的话,我不想升级到Access 2010。 谢谢!

使用C#格式化Excel图表背景

我已经可以将数据填充到电子表格中,根据我select的范围创build图表。 但是,当涉及到格式化的实际图表,我觉得有点失落,因为他们有这么多的select! 这是一个xlCylinderBarStackedtypes的图表。 我只需要使酒吧的颜色是一个很好的淡橙色,并使背景淡蓝色在底部褪色成白色。 任何想法如何做到这一点?

自动添加行到Excel文件模板

我正在IIS 7上运行.net 4.0 asp.net应用程序。我想知道是否有一个简单的方法可以将行添加到用户可以从服务器上下载的excel 2007/2010(不是过于臃肿)的模板文件中。 例如,用户可能检查几个勾选框并点击网页上的一个button。 服务器在一个表上执行一个sql查询并返回结果。 我有一个Excel文件,在Web应用程序的资源目录中包含一些标题,列标题,格式等。 我想复制这个文件,将每个结果作为一行插入到这个文件中(插入名字到单元格A3,姓名到单元格B3等)。 并使其可供用户保存在其磁盘上。 由于Excel(xls)格式是“开放格式”,我想知道这是多么简单/直接。 是加载Excel XML DOM和插入XML元素的问题吗? 我需要使用什么库? 任何帮助或资源将不胜感激。

使用ASP.net中的macros编辑Excel文档

是否有可能以任何方式通过包含macros的ASP.net页面编辑Excel工作表。 我试图打开Excel工作表,它似乎只是挂起而不是加载Excel。 在没有macros的页面上testing工作很好吗?

使用Microsoft Interop读取和写入Excel单元格

我在我的网站部署的Web服务器上有一个Excel文件。 该场景,我有一个屏幕,允许用户从Web服务器下载一个Excel文件,并保存到本地驱动器,然后select相同的文件path导出数据。 BT我得到以下错误 ASP.NET无权访问请求的资源。 考虑将资源的访问权限授予ASP.NET请求标识。 ASP.NET具有基本的进程标识(通常是IIS 5上的{MACHINE} \ ASPNET或IIS 6上的networking服务),如果应用程序未模拟,则使用该标识。 如果应用程序正在通过模拟,身份将是匿名用户(通常为IUSR_MACHINENAME)或经过身份validation的请求用户。 要授予对文件的ASP.NET访问权限,请右键单击资源pipe理器中的文件,select“属性”并select“安全”选项卡。 点击“添加”添加适当的用户或组。 突出显示ASP.NET帐户,并选中所需的访问权限框。 下面是我的代码 private void btnExportToExcel_Click(object sender, System.EventArgs e) { Microsoft.Office.Interop.Excel.ApplicationClass appExcel = new Microsoft.Office.Interop.Excel.ApplicationClass(); DataSet dsResult = new DataSet(); object missingValue = System.Reflection.Missing.Value; decimal wkOpenBal = 0.00m; decimal wkAddition = 0.00m; decimal wkDisposal = 0.00m; string rptDt = ""; decimal os_p = […]

Excel(Office)和C#

目前我必须维护一个由许多VBA模块组成的Excel应用程序 。 对我来说,它就像一个传统的系统,VBA看起来像最近几天的语言。 考虑迁移到C#和基于.NET的Office应用程序有意义吗? 一般而言,.NET的办公自动化的优点和缺点是什么? 还是VBA仍然是开发Office应用程序和Office自动化的更好方式? 顺便说一句,我是一个有经验的.NET开发人员。

在Excel中用C#编写带双引号的公式

我想在Excel单元格中编写一个公式。 我设法写简单的公式,但我有一个与以下公式的问题: =IF(OR(ISBLANK(I20631);ISBLANK(F20631));"";I20631=F20631) 在我的C#程序中,它试图这样做: ExcelWorksheet.Cells[row, column] = "=IF(OR(ISBLANK(I" + row +");ISBLANK(F" + row +"));\"\";I"+ row +"=F" + row +")"; 我有一个豁免,因为“”(我认为是这样) 当我在Excel单元格中写入时,Excel不能插入“作为双引号符号”而我不能用Visual Studio编写一个string而不写“ 是否有可能有另一种方式来写一个string双引号字符使用\“?(我alos尝试"但它仍然被解释为\“) 先谢谢你, 托马斯

Microsoft Excel Interop检查Excel工作表是否支持Autofit

在使用Excel Interop ,我想出了一个问题。 保存之前我使用以下代码自动调整工作表的列。 Excel.Worksheet curSheet = (Excel.Worksheet)wsEnumerator.Current; curSheet.UsedRange.EntireColumn.AutoFit(); 它对我来说工作得很好。 然后我遇到了一些特定的Excel工作表的问题。 如果我自动填写它表示AutoFit method of Range class failed 。 导致问题的Excel表可以在这里find 现在我想知道的是,是否有一些方法来检查一个Excel表格是否支持Autofit。 就像是 if(sheet.CanAutoFit()) curSheet.UsedRange.EntireColumn.AutoFit(); 任何帮助,将不胜感激。