Tag: excel interop

使用Excel.Interop访问Range的更快捷的方法

我知道有两种方法 – _xlWorksheet.Range[_xlWorksheet.Cells[1, 1], _xlWorksheet.Cells[10, 10]].Value2 = myarray.ToArray(); 要么 _xlWorksheet.Range["A1", "J10"].Value2 = myarray.ToArray(); 要么 还有其他更快的方法吗? 根据我的理解,当我使用 _xlWorksheet.Range[_xlWorksheet.Cells[1, 1], _xlWorksheet.Cells[10, 10]] 将有三个电话互通。 但是,如果 _xlWorksheet.Range["A1", "J10"] 只会有一个电话。 我不确定哪一个工作更快。

如何在Excel中使用C#获取用户选定范围中的特定单元格

我创build了我的第一个Excel加载项,并希望查找用户select的范围内的特定单元格。 我知道列中的值是我需要的。 所以我testing它: Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; Excel.Range firstValue = selection.Columns["I"].Find("*", Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart,Excel.XlSearchOrder.xlByColumns,Excel.XlSearchDirection.xlNext, false, Type.Missing,Type.Missing); 现在我有“I”栏的第一个值, 当用户所做的“select”从列“A”开始时, 如果用户select从C2到H20的取样,代码不能find列“我”我变得比其他范围,而不是“我”列。 我认为他是“我”总是“9”。 当用户在新范围中从“C2”到“H20”select的列是“C”=“0”,列“L”= 9时,即使我在代码中写入“I”,代码select列“L” 。 有没有人有一个想法,我怎么能读取特定的列或细胞我想要的内心select的用户,无论用户开始他的select? 先谢谢你

Excel Interop的RefreshAll()方法是如何工作的?

有一堆excel文件。 每个excel文件都有连接到SQL Server Analysis(SSAS)多维数据集的各种数据透视表。 平均而言,手动完成时,每个文件需要大约30到60分钟才能刷新。 我正在自动化写这个C#程序。 遍历每个文件,这些是步骤: 实例化excel应用程序 打开工作簿 调用.RefreshAll()方法 closures工作簿 退出excel应用程序。 目前,我已经做了顺序执行。 没有multithreading。 我打开进程资源pipe理器,我发现在进行文件刷新时,对于excel进程,CPU占用1%到2%左右。 我的问题是将在多个线程上运行这些步骤带来的程序的总时间? 是.RefreshAll()方法IO密集? 如果是这样,IO会成为我所有multithreading的瓶颈吗?

使用Excel Interop以相同格式从Excel保存PDF

从Excel保存到PDF时遇到问题。 格式从一台计算机改变到另一台。 在保存为PDF之前,我在Excel中设置了以下格式:分页符为A4,边距为1.3,方向为横向。 然后我使用命令excelWorkbook.ExportAsFixedFormat导出为PDF,但PDF格式在其他计算机上不同。 在计算机A上,我有正确格式的完整A4页面的PDF文件。 在电脑B上,我有一个以上的A4页面。 在电脑C上,我有一个A4页面,但边距不正确。 如何在任何使用Excel Interop的机器上保存PDF格式相同的格式?

使用Solver加载项时,Excel应用程序在后台运行

我正在开发一个.NET应用程序,它打开一个工作簿,运行一些VBAmacros,刷新连接等等。这很好,但是当我运行一些使用Solver加载项函数的VBAmacros时,即使在我重新发布所有COM对象正确(调用'Marshal.ReleaseComObject')。 我该如何解决? 编辑: 这里是一个重现此问题的代码示例: Excel.Application xlApp = null; Excel.Workbooks xlWorkbooks = null; try { xlApp = new Excel.Application(); xlApp.Visible = true; xlApp.DisplayAlerts = false; xlWorkbooks = xlApp.Workbooks; Excel.Workbook xlWorkbook = xlWorkbooks.Open(Filename: path, ReadOnly: false); xlApp.Run(macro); xlWorkbook.RefreshAll(); xlWorkbook.Close(SaveChanges: true); xlApp.Quit(); releaseObject(xlWorkbook); releaseObject(xlWorkbooks); releaseObject(xlApp); } catch (Exception e) { Console.WriteLine("Erro ao executar métodos Excel"); Console.WriteLine(e.Message); } 在这里我实现的function来释放COM对象: […]

在C#中使用非相邻列中的数据创buildExcel图表

我需要使用两个不相邻列的两个范围来创build一个图表,并在代码中定义哪个范围将采用X轴和Y轴。 例如:对于M3:M15和K3:K15这两个范围,我需要X轴值为K3至K15 ,Y轴值为M3至M15 。 我有一个代码从两个相邻的列创build图表: string start_chart_values = "M3"; int stop_chart_line_calc = 1 + num_of_rows_to_copy; string stop_chart_values = "L" + stop_chart_line_calc.ToString(); double chart_location = stop_chart_line_calc * 12; Excel.Range chartRange; Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing); Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(2, chart_location, 300, 250); Excel.Chart chartPage = myChart.Chart; Excel.Axis yAxis = chartPage.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary); yAxis.ScaleType = Excel.XlScaleType.xlScaleLogarithmic; chartRange = xlWorkSheet.get_Range(start_chart_values, […]

select所有可见的行和列的Excel

我有一个dynamic的Excel表,其中一些行和列是隐藏的。 我不知道哪些行和哪些列被隐藏,因为他们不断变化。 我需要提取所有可见的数据并创build一个行列表。 这就是我现在所拥有的: Excel.Application excelApp = new Excel.Application(); excelApp.DisplayAlerts = false; string cellValue = string.Empty; string fileName = @"C:\Source\filename.xlsx"; CorpData datatest = new CorpData(); if (File.Exists(fileName)) { excelApp.Workbooks.Open(fileName, true, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Worksheet excelWorkSheet = (Excel.Worksheet)excelApp.Workbooks[1].Sheets["Sheet1"]; Excel.Range usedRrange = excelWorkSheet.UsedRange.SpecialCells(Excel.XlCellType.xlCellTypeVisible); int count = usedRrange.Count; […]

如何保存工作表选项卡的名称导出c#

我有以下代码如何保存sheetname Excel文件请参阅下面的图像和代码,我想添加发票没有,但其显示错误 Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); // app.Visible = true; app.Workbooks.Add(@"E:\Excel Single Sheet\Invoice-INV68.xls"); app.Workbooks.Add(@"E:\Excel Single Sheet\Invoice-INV67.xls"); string path = @"E:\E:\Excel Single Sheet\New folder\"; int InvoiceNo = 221; for (int i = 2; i <= app.Workbooks.Count; i++) { InvoiceNo++; for (int j = 1; j <= app.Workbooks[i].Worksheets.Count; j++) { Microsoft.Office.Interop.Excel.Worksheet ws = app.Workbooks[i].Worksheets[j]; ws.Copy(app.Workbooks[1].Worksheets[1] + […]

Powershell和Excel,与.replace区分大小写

我对Powershell脚本相当陌生,所以请原谅我,如果代码和/或解释是马虎。 我正在尝试创build一个脚本来打开一个Excel电子表格,并用标准字符replace所有的特殊字母(如等等)。 现在,脚本工作,但它将电子表格中的所有大写字符变成小写字符(例如“奥尔堡”变成“奥尔堡”),如果不是这样,我宁愿这样做。 我已经被引导认为.replace方法是区分大小写的,虽然在这里似乎并不是这样。 现在我已经尝试了一些事情,双引号而不是单引号,双引号和单引号,而不是.replace,而只是吐出来 System.__ComObject 而没有真正改变电子表格中的任何东西(我认为$ objRange是一个数组,这是为什么?),大写和小写字母都添加.replace,但没有任何工作。 任何人都能指出我的错误? 码: $excelFile = New-Object system.windows.forms.openfiledialog $excelFile.InitialDirectory = 'Q:\Address_convert' $excelFile.MultiSelect = $false $excelFile.showdialog() $excelFile.filenames $excelFile = $excelFile -replace "System.Windows.Forms.OpenFileDialog: Title: , FileName: ", "" if ($excelFile -like '*.xlsx*') { $excel = New-Object -comObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false $workBook = $excel.WorkBooks.Open($excelFile) $oReturn = [Microsoft.VisualBasic.Interaction]::MsgBox("Replace special […]

当Application.Visible为false时,间歇性错误0x800A03EC

我在C#中使用Excel进行互操作,遇到了一个我无法弄清楚的奇怪的错误。 我一直在做这个错误的大量阅读,你可能会注意到这篇文章的标题是非常类似于间歇HRESULT:0x800A03EC错误在Excel的SaveAs在.NET 2.0应用程序 。 这个问题是不一样的。 我有的错误是间歇性的, 但有一些疯狂的方法。 我只是无法弄清楚这个方法是什么。 当我尝试执行这样的一行时,我得到错误0x800A03EC ,恰好在我将副本保存到networking后发生: someExcelWorksheet.getRange("MyNamedRange").Value = "new value"; 我知道这是一个令人厌恶的错误,其原因很难缩小。 这是Hans Passant对第一段中提到的问题的评论。 当Excel因为忙于完成其他工作而感到不安时,就会发生这种情况。 当你有一台更快的机器时,可能会发生,让你更难以掌握Excel。 很难处理。 这里有一个有趣的部分:只有当Excel应用程序不可见并且使用Wi-Fi时才会发生。 以下是四个用于澄清的用例: 100%成功:以太网( app.Visible = true;下, app.Visible = true;上)+ app.Visible = true; 100%成功:以太网( app.Visible = false;下, app.Visible = false;上)+ app.Visible = false; 100%成功: Wi-Fi( app.Visible = true;下, app.Visible = true;上)+ app.Visible = true; 成功30%: Wi-Fi( […]