Tag: com interop

使用C#的Microsoft.Office.Interop.Excel生成具有预先设置的下拉值的Excel文件

我想从我的C#应用程序生成一个Excel文件,用户将可以在以后填写。 我正在使用Microsoft.Office.Interop.Excel 。 我正在启动Excel并使用下面的代码填充标题单元格: var excelApp = new Excel.Application {Visible = true}; var workbook = excelApp.Workbooks.Add(Missing.Value); var workSheet = (Excel.Worksheet) workbook.Worksheets.Item[1]; headers.Select((s, i) => new Tuple<string, int>(s, i)).ToList().ForEach ( h => { workSheet.Cells[1, h.Item2 + 1] = h.Item1; } ); 我怎样才能指定第一列的单元格应该有一个包含预填充值的下拉菜单? 我已经尝试了大量的在线可用的东西,比如下面在这里find的,没有运气: var dropDownRange = workSheet.Range["A2"].Resize[64000]; dropDownRange.Value = Values; dropDownRange = dropDownRange.Offset[0, 1]; dropDownRange.Validation.Delete(); dropDownRange.Validation.Add(Excel.XlDVType.xlValidateList, […]

我如何使用VBA中的VisualBasic-Express for Excel或Access项目?

我将我的VB-Express代码保存为.dll,并用regasm注册并创build了一个.tlb文件。 但是,当我尝试运行一个Excel模块中的函数时,我得到: 运行时错误'453':无法findDLL入口点在kernel32中的RegisterServiceProcess 我错过了什么步骤?

C#类库不会注册COM

我正在尝试访问Microsoft Excel中的.NET类库。 要做到这一点,我知道.NET类库必须注册COM。 所以我试着去assembly信息和设置COM可见为true。 然后在生成选项卡上,我也为COM设置了Register for Interop。 我检查了AssemblyInfo.cs文件,它包含[assembly: ComVisible(true)] 。 但是由于某些原因,当我尝试在Excel中添加对类库的引用时,名称空间不会显示在列表中。 我做了一个没有任何内容的快速testing类库,并做了相同的事情(设置COM Vis = true,并注册COM Interop = true),并确实显示在可用的引用列表。 我无法弄清楚这两个阶级之间有什么不同。 我不确定我的class级是否实际上正在注册COM互操作。 有谁知道我能做些什么来解决这个问题? 补充:我曾尝试使用RegAsm手动注册类,但我得到以下消息… "RegAsm : warning RA0000 : No types were registered" 补充:我检查我的项目输出目录,我注意到一个types库文件(* .tlb)没有被创build时,我生成的项目。 我确信每个类都有它自己的GUID属性。 该项目不包含任何结构,接口或枚举。

将DataSet拖放到工作表中的最快方法

一个有16000 x 12条目的higeisch数据集需要被转储到工作表中。 我现在使用下面的函数: for (int r = 0; r < dt.Rows.Count; ++r) { for (int c = 0; c < dt.Columns.Count; ++c) { worksheet.Cells[c + 1][r + 1] = dt.Rows[r][c].ToString(); } } 我把这个例子给了中间的一块 这是我读完Dave Zych的build议后实施的。 这很好。 private static void AppendWorkSheet(Excel.Workbook workbook, DataSet data, String tableName) { Excel.Worksheet worksheet; if (UsedSheets == 0) worksheet = […]

使用Excel数据的简单任务不会导致“ContextSwitchDeadlock”

我有一个Excel workbook对象包含一张workbook sheet ,我想将其内容复制到List 。 我有这个方法: private Task GeneratePagesList() { _pages = new List<Model.Page>(); short idCount = 0; var generatePagesListTask = new Task(() => { _pages.Add(new Model.Page() { Url = new Uri(_worksheetRange.Cells[i, j].Value2.ToString(), UriKind.RelativeOrAbsolute), Id = idCount }); }); return generatePagesListTask; } 现在我想要使用这个方法和它返回的Task ,如下所示: public async void ConvertExelDataAsync() { var generatePagesListTask = GeneratePagesList(); generatePagesListTask.Start(); await […]

如何在不使用excel com库的情况下将macros插入到excel文件中

有没有办法将现有的macros插入到现有的Excel文件中而不使用Excel库? 我需要这个设置excel来打印整个工作簿。我不能使用excel库,因为它将在不可能安装excel的服务器上在线完成。 我可以使用c#.net编码。 我正在使用NPOI来生成excel。 macros在下面给出 Private Sub Workbook_BeforePrint(Cancel As Boolean) If printed = False Then Cancel = True printed = True ActiveWorkbook.PrintOut End If End Sub

Microsoft.Office.Interop.Excel 2010气泡图渐变

我正在尝试设置以编程方式创build的图表的某些属性,但无法在Excel 2010中为Bubble Chart设置正常的属性: 格式数据系列| 填充| 渐变填充| types| 径向 使用下面的代码。 Interop.Series s = TemplateBubble.SeriesCollection(1); Interop.ChartFillFormat ff = s.Fill; ff.TwoColorGradient(Microsoft.Office.Core.MsoGradientStyle.msoGradientFromCenter, 2); ChartFillFormat.TwoColorGradient方法指示第二个参数可能会将types设置为Radial,因为有4个渐变types。 在debuggingff.GradientVariant ,等于1显示代码的最后一行。 我如何获得径向渐变?

使用interop和c#来计算Excel电子数据表的工作表中包含数据的行

我刚刚写了什么被认为是非常丑陋的代码来计算在一个给定的目录中的所有电子表格工作表中的数据“数据”包含数据的行。 这是代码 private const string _ExcelLogDirectoryPath = @"..\..\..\..\Model\ExcelLogs\"; static void Main() { var excelLogPaths = Directory.GetFiles(_ExcelLogDirectoryPath, "*.xl*"); var excel = new Microsoft.Office.Interop.Excel.Application(); var excelRowCounts = new Dictionary<string, int>(); foreach (var filePath in excelLogPaths) { var spreadsheet = excel.Workbooks.Open(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "/" + filePath); var worksheet = spreadsheet.Sheets["Data"] as Worksheet; if (worksheet != null) { // var […]

Excel Interop:Range.FormatConditions.Add抛出MissingMethodException

我正在编写一个应用程序使用Microsoft.Office.Interop.Excel程序集导出/从Excel电子表格导入数据。 一切都很好(除了基于索引1和所有这些可选参数!),直到我试图使用条件格式。 当我调用Range.FormatConditions.Add时,我得到一个MissingMethodException,告诉我没有这样的方法存在。 这发生在Vista和XP中。 以下是生成exception的代码示例: //1. Add a reference to Microsoft.Office.Interop.Excel (version 11.0.0.0) //2. Compile and run the following code: using Microsoft.Office.Interop.Excel; class Program { static void Main(string[] args) { Application app = new Application(); Workbook workbook = app.Workbooks[1]; Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; Range range = worksheet.get_Range("A1", "A5"); FormatCondition condition = range.FormatConditions.Add( XlFormatConditionType.xlCellValue, XlFormatConditionOperator.xlBetween, 100, […]

Asssembly.LoadFrom通过Excel 2007调用失败

我有一个.NET 4.0类使用Assembly.LoadFrom来加载一个.NET 3.5混合模式程序集。 当从.NET 4.0应用程序调用此类(在configuration文件中指定useLegacyV2RuntimeActivationPolicy =“true”时),它一切正常。 但是,这个类也是COM可见的,当我从Excel 2007中调用它(同样,Excel.exe.config指定useLegacyV2RuntimeActivationPolicy =“true”)我得到一个FileLoadException: 无法加载文件或程序集'Foo …'或其某个依赖项。 无法加载运行时。 (从HRESULTexception:0x80131700) 内部exception是System.Runtime.InteropServices.COMException:加载运行时失败。 (从HRESULTexception:0x80131700) 从Excel 2003或Excel 2010或vbscript调用时,我不会遇到此问题。 有人可以解释发生了什么,我该如何解决?