Tag: excel interop

在Excel中连续地将数据保存到列中

我在保存标签中的数据时遇到了麻烦。 当我保存时,它总是覆盖。 将数据保存到列B是可以的,但是当它转到列C时,它会覆盖它。 B列中的数据将被删除。 只有C列被保存。 private void button1_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application OfficeExcel; Microsoft.Office.Interop.Excel._Workbook OfficeWorkBook; Microsoft.Office.Interop.Excel._Worksheet OfficeSheet; try { //Start Excel and get Application object. OfficeExcel = new Microsoft.Office.Interop.Excel.Application(); OfficeExcel.Visible = true; //Get a new workbook. OfficeWorkBook = (Microsoft.Office.Interop.Excel._Workbook)(OfficeExcel.Workbooks.Add("")); OfficeSheet = (Microsoft.Office.Interop.Excel._Worksheet)OfficeWorkBook.ActiveSheet; int apple = 10, banana = 11, grapes = 12, orange = […]

从Windows窗体DataGridView和TextBox导出数据到Excel

我有一个包含数量的TextBox控件和DataGridView的Form 。 我想从该表单导出数据到Excel文件。 我使用这个代码,它完美的DataGridView工作,但我不知道如何导出TextBox控件数据。 private void copyAlltoClipboard() { dataGridView1.SelectAll(); DataObject dataObj = dataGridView1.GetClipboardContent(); if (dataObj != null) Clipboard.SetDataObject(dataObj); } try { copyAlltoClipboard(); 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 Microsoft.Office.Interop.Excel.Application(); xlexcel.Visible = true; xlWorkBook = xlexcel.Workbooks.Add(misValue) xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); Microsoft.Office.Interop.Excel.Range CR = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[1, 1]; CR.Select(); xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, […]

使用Excel Interop在工作表中列出所有validation对象,而不必在每个单元格上迭代

我想知道是否有可能列出所有Excel.Validation对象的特定工作表没有迭代每个单元格。 迭代每个单元花费很多时间。 有时,validation约束应用于大范围(未命名)。 我想要 : 快速列出所有的约束对象 更改约束(Validation.Formula1) 是否有可能没有迭代每个单元格? 这段代码需要很多时间: foreach (Excel.Range cell in mySheet.UsedRange) { string newFormula1 = …; cell.Validation.Modify(Formula1: newFormula1); } 其实,我正在寻找mysheet.ValidationList对象。 谢谢。

Excel C API相当于Interop Range.Value在C#

试图找出如何读取引用的内容,并获得相同的结果和Interop / COM的Range.Value …即返回的对象[,]包含string,date时间和双打。 我正在使用ExcelDNA(和底层的XlCall.Excel调用C API)和两个… ExcelReference.GetValue()和XlCall.Excel( XlCall.xlfDeref, reference ) 两者都返回等同于Interop / COM的Range.Value2的对象[,] …即返回的对象[,]仅包含string和双精度。 这个问题是date返回为double,我没有办法确定值是否应该是一个double或DateTime 。

Excel ExportAsFixedFormat(PDF)在导出的PDF中添加额外的空白工作表

我已经使用Excel ExportAsFixedFormat()成功导出了excel文件的PDF,但是这种方法在每个表格中添加了额外的空白表格。 如果我将工作簿保存为excel文件,则不包含任何多余的工作表。 使用的纸张范围是从A1-B6所以只有12个单元在使用。 这里是我如何将Excel工作簿导出为PDF。 xlNewWorkBook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, userSpecificFile, missing, missing, true, missing, missing, missing, missing); 我无法弄清楚为什么要添加这些额外的空白表。

为什么我的Excel Interop代码中的字体大小设置为?

我在我的代码中设置了一个范围的字体大小: var rowRngRptTitle = _xlSheet.Range[_xlSheet.Cells[2, 1], _xlSheet.Cells[2, 13]]; rowRngRptTitle.Merge(Type.Missing); rowRngRptTitle.Font.Size = 24; rowRngRptTitle.Font.Bold = true; rowRngRptTitle.Value2 = String.Format("Delivery Performance – {0} – {1}", _delPerfBeginDate.ToShortDateString(), _delPerfEndDate.ToShortDateString()); …但值不生效,或“粘” – 字体大小很小(看起来像10,与未configuration的范围相同)。 但是,如果稍后将其设置,在整个工作表编写后,通过创build一个新的范围: var rowRngRptTitle2 = _xlSheet.Range[_xlSheet.Cells[2, 1], _xlSheet.Cells[2, 13]]; rowRngRptTitle2.Merge(Type.Missing); rowRngRptTitle2.Font.Size = 24; rowRngRptTitle2.Font.Bold = true; …它的作品 – 字体大小确实是24而不是10。 什么可以取消早期设置的大小? 在引用该范围的整个代码中没有其他的“Font.Size =”。 在一些更多的情况下,这里是代码(不必要的effluvia消除): private void PopulateSheet(string shortName) { […]

如何validationExcel互操作对象是否正确清理?

我在我的项目中实例化Excel互操作对象。 我知道清理这些对象需要特别的努力(见这个问题 )。 有没有自动的方法来validation清理是否正确完成? 详细说明,我知道,如果清理工作不正确,Excel.exe可能会在调用Application.Quit后继续运行。 但是,我不清楚这是否是一个可靠的testing条件。 而且,由于一个持续不断的Excel.exe过程只是真正的function障碍的一个症状,如果存在这样的情况,使用更接近根本原因的testing条件似乎更可取。

将页脚添加到Excel表集合

我正在尝试将页脚添加到Excel工作簿中作为C#程序的一部分。 我可以通过下面的代码一次添加一个选项卡,但每个工作簿大约需要10分钟左右的时间。 public void addFooter(Excel.Workbook wkbk) { string footer = "test footer"; foreach (Excel.Worksheet wksht in wkbk.Worksheets) { if (chkRemoveCoverFooter.Checked == true && wksht.Name == "Cover" || wksht.Visible != Excel.XlSheetVisibility.xlSheetVisible) { continue; } else { wksht.PageSetup.RightFooter = footer; } } } } 我发现我可以通过这里回答的问题分组。 我能够让团队select下面,但我很难以如何访问PageSetup来一次更改所有的页脚。 我知道可以通过VBA轻松完成,但C#中没有“With”语句可以使用。 提前感谢您的任何指针。 public void addFooter(Excel.Workbook wkbk) { string footer = "Test […]

Excel Interop Chart隐藏图表区域文本

我使用下面的代码创build了以下图表对象(VB.Net和Microsoft Excel Interop) Dim ColumnChart As Microsoft.Office.Interop.Excel.Chart Dim ColumnChartShape As Microsoft.Office.Interop.Excel.Shape = oSheet.Shapes.AddChart() ColumnChart = ColumnChartShape.Chart CCLastRow = oSheet.Rows.End(Excel.XlDirection.xlDown) CCLR = oSheet.UsedRange.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell).Row CCLC = oSheet.UsedRange.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell).Column oSheet.Range("$C$3:" & GetExcelColumn(CCLC) & CCLastRow.Row).NumberFormat = "$#,##0_);($#,##0)" ColumnChartSourceRange = oSheet.Range("$B$3:" & GetExcelColumn(CCLC) & CCLastRow.Row) With ColumnChart .ChartWizard(Source:=ColumnChartSourceRange, Title:="Purchases – " + TextPeriod1Name + " vs " + TextPeriod2Name, PlotBy:=Microsoft.Office.Interop.Excel.XlRowCol.xlColumns) .ApplyLayout(9, […]

如果应用程序在使用interop进行读取/写入时closures,则互操作性不会释放Excel服务

我正在创build一个WPF应用程序。 当它第一次加载它从3个不同的Excel文件使用互操作,如果它留给自己的设备读取数据一切都很好,所有的服务都正常结束,但是如果你closures应用程序之前,它完成阅读,并释放一切服务将保持开放,直到手动closures。 下面是我已经有的代码的一些例子,这样你就可以知道我是如何做所有事情的。 这就是我如何在Excel类中调用方法*注意我的Excel类是静态的 Parallel.Invoke( () => _someList1 = Excel.ReadFile1(path + "ExcelFile1.xlsx"), () => _someList2 = Excel.ReadFile2(path + "ExcelFile2.xlsx"), () => _someList3 = Excel.ReadFile3(path + "ExcelFile3.xlsx")); 这里是我的Excel类中的方法的例子 public static IList<SomeObject> ReadFile1(string absolutePath) { object[,] values = StartRead(absolutePath); for (int i = 2; i < values.GetLength(0) + 1; i++) { //doing stuff in here } return […]