Tag: excel interop

运行Excel的用户有可能对使用Excel Interop代码的应用程序产生负面影响吗?

我创build了一个由几个内部用户使用的Excel Interop应用程序。 有人指出,当她同时使用Excel时,我的应用程序无法正常工作; 起初我以为这是一个巧合/迷信,但后来我发现一个参考 ,指出在一个Excel Interop应用程序的同时运行Excel可能确实certificate是problamatic。 这真的是这样的 – 我应该build议他们都使用我的应用程序之前退出Excel?

迭代通过excel行跳过一个数字每一次它通过foreach循环,拉错单元格值。 为什么

我有这个方法需要两个string参数,并遍历Excel工作表中的每一行来查找两列中的匹配。 当它发现一个匹配时,它返回行号,这样的数字可以用来确定(在另一个方法)哪一行更新。 public int IterateRows(string f, string l) { Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(locationAndNameOfExcelFile, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = (Microsoft.Office.Interop.Excel._Worksheet)xlWorkbook.Sheets[1]; //Iterate the rows in the used range foreach (Microsoft.Office.Interop.Excel.Range row in xlWorksheet.UsedRange.Rows) { var familyNameCellValue = row.Cells[row.Row, 2].Value2.ToString(); var […]

我怎样才能改变我的数据透视表,以便以所需的方式显示数据?

我已经能够将一张数据透视表拖到舞池上,但是却一直没能把它放到舞池上 – 似乎我们一直在踩着彼此的脚趾。 我已经在表格上创build数据透视表的数据。 这个类描述了这个数据: public class PriceVarianceData { public String Unit { get; set; } public String ShortName { get; set; } public String ItemCode { get; set; } public String Description { get; set; } public String PriceWeek { get; set; } public String Week { get; set; } public String Price { […]

ExcelDNA评估公式返回自定义UDF的ExcelErrorName

我正在使用ExcelDNA在C#中编写自定义UDF,但这似乎是Excel和公式评估的一个普遍问题。 我唯一的问题:我做错了什么(可能是错误的UDF定义),或者这是Excel的问题吗? 感谢您的帮助。 ================================================== ======================= UDF 比方说,我定义一个这样的UDF: [ExcelFunction(IsMacroType = true, Name = "MyTest")] public static string MyTest() { return "MyTest"; } 加工 以下公式评估工作正常(结果“MyTest”): var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "MyTest()"); 不工作 鉴于此评估不起作用(结果将是“ExcelErrorName”): var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "CONCAT(MyTest(); MyTest())"); 我尝试了几件事,并认识到可以创build任意数量的UDF,并将它们嵌套在一起。 但只要您将任意两个(或更多)自己的UDF作为parameter passing给任何其他函数,Excel将无法评估公式。 我也尝试使用Excel的互操作方法返回相应的COM错误: var app = ExcelDnaUtil.Application as Application; var result = app.Evaluate("CONCAT(MyTest(), MyTest())"); 例子 加工 var evaluation […]

如何根据DataField PivotField的内容对数据透视表进行sorting/sorting?

我有一页PivotData(源数据),用于在另一个工作表上创build数据透视表。 我是这样做的: var pch = _xlBook.PivotCaches(); int pivotDataRowsUsed = _xlBook.Worksheets["PivotData"].UsedRange.Rows.Count; int pivotDataColsUsed = _xlBook.Worksheets["PivotData"].UsedRange.Columns.Count; string lastColWrittenAsAlpha = ReportRunnerConstsAndUtils.GetExcelColumnName(pivotDataColsUsed); string endRange = string.Format("{0}{1}", lastColWrittenAsAlpha, pivotDataRowsUsed); Range sourceData = _xlBook.Worksheets["PivotData"].Range[string.Format("A1:{0}", endRange)]; PivotCache pc = pch.Create(XlPivotTableSourceType.xlDatabase, sourceData); PivotTable pvt = pc.CreatePivotTable(_xlPivotTableSheet.Range["A6"], "PivotTable"); pvt.MergeLabels = true; // The only thing I noticed this doing was centering the heading labels […]

如何设置EXCEL打印设置“打印整个工作表”? C#

我的程序将在同一个EXCEL文件中导出WorkSheets 。 而我正在尝试将打印默认设置设置为“打印整个工作簿”。 我尝试使用PrintOutEx来设置它,但是当我导出EXCEL时,它会立即打印出worksheets或进入预览模式。 我只想将默认设置为“ Print Entire Workbook 。 我想让用户先读取excel文件。 怎么办? 谢谢。 这是我的代码: Excel.Application oApp; Excel.Worksheet oSheet; Excel.Workbook oBook; //Check if the row records are more then the table row. if (rowCount > 19) more_than_table = true; oApp = new Excel.Application(); oBook = oApp.Workbooks.Add(); do { Debug.WriteLine("Page: " + sheet_page); oSheet = (Excel.Worksheet)oBook.Worksheets.Add(After: oBook.Sheets[oBook.Sheets.Count]); oSheet.Name […]

打开“用密码保护”的excel文件请求密码 – Excel 2007

我开发了一个C#控制台应用程序(使用Framework.NET 4.0和Excel互操作),它从ms-access数据库查询特定的数据并创build一个Excel文件“.xlsx”。 生成的Excel文件受密码保护。 以下代码用于创build一个新的“使用密码保护”的 Excel文件: myWorkbook.Password = "xxx"; myWorkbook.SaveAs(path_file); myWorkbook.Close(); myExcel.Quit(); releaseObject(myWorkbook); releaseObject(myNewSheet); releaseObject(myExcel); 我使用下面的代码打开生成的Excel文件: Workbook myExcelWorkbooks = myExcelApp.Workbooks.Open(Filename: Path.GetFullPath(file_to_excel_file), ReadOnly: false, Password: "xxx"); 使用前面的代码,用户不需要input密码,并允许应用程序继续工作(即在控制台应用程序运行时不显示Excel文件) 。 我使用Windows 7-10操作系统和Mi​​crosoft Excel 2010-2016在PC上testing了以前的代码,它工作正常。 但是,当我用Excel 2007和Windows 7 OS在PC上执行我的控制台应用程序时,Excel程序打开并要求用户input密码。 如何改变这种行为? ,为什么在Excel 2007中打开的Excel文件显示出来并要求用户input密码?

使用所有单元格格式将dataGridView导出到Excel

我有这个代码,我知道它的工作很快 CopyAlltoClipboard(dataGridViewControl); Microsoft.Office.Interop.Excel.Application xlexcel; Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlexcel = new Excel.Application(); xlexcel.Visible = true; xlWorkBook = xlexcel.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xlWorkSheet.Name = page.Name; Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1]; CR.Select(); xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true); ((Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Range["A1"]).EntireColumn.Delete(null); // delete the first column that has rows indexes xlWorkBook.SaveAs(fileName); private void CopyAlltoClipboard(DataGridView […]

获取特定列中的行数(来自特定行)Excel Interop C#

我希望能够从特定的行(例如,A2到列A中使用的最后一行)获取列中使用的行数。 我试了下面的代码,但无法得到所需的结果(即,应得到4,但得到5行) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Excel = Microsoft.Office.Interop.Excel; namespace excel_interop_practice { class Program { static void Main(string[] args) { Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("D:\\book1.xlsx"); Excel.Range xlTestRange; Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; xlTestRange = xlWorksheet.UsedRange; int row_used = xlTestRange.Cells[2, 1].End(Excel.XlDirection.xlDown).Row; Console.WriteLine(row_used); Console.ReadKey(); } […]

无法将“System .__ ComObject”types的COM对象转换为接口types“Microsoft.Office.Interop.Excel.Worksheets”

我在写一个利用Microsoft.Office.Interop.Excel程序集的类。 这是一个“一站式”DLL库的一部分,它将被用于一个Java解决scheme(限制在Java端的接口数量)。 我收到以下错误: 其他信息:无法将“System .__ ComObject”types的COM对象转换为“Microsoft.Office.Interop.Excel.Worksheets”types的接口。 此操作失败,因为IIC“{000208B1-0000-0000-C000-000000000046}”接口的COM组件上的QueryInterface调用失败,原因是出现以下错误:没有支持此接口(exception来自HRESULT:0x80004002(E_NOINTERFACE)) 。 这是由以下代码引发的: Public Class XL Public XL As Excel.Application = Nothing Public XLN As String Public WBS As Excel.Workbooks = Nothing Public WBSN() As String Public WB As Excel._Workbook = Nothing Public WBN As String Public WSS As Excel.Worksheets = Nothing Public WSSN() As String Public WS As […]