Tag: excel interop

我该如何处理“没有构造函数定义”和“types不能embedded”例外?

添加Excel 12参考(添加了Microsoft.Office.Interop.Excel和VBIDE DLLs)后,我从这里复制并粘贴代码,即: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace WindowsFormsAppExcelTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void buttonCreateExcelFile_Click(object sender, EventArgs e) { Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue […]

我怎样才能让Excel单元格“正确的大小”到他们的内容?

我希望使用C#填充的Excel电子表格单元展开或收缩,以便在不手动调整单元格宽度的情况下显示其所有内容 – 以“恰到好处”的宽度显示数据 – 不多不less。 我试过这个: _xlSheet = (MSExcel.Excel.Worksheet)_xlSheets.Item[1]; _xlSheet.Columns.AutoFit(); _xlSheet.Rows.AutoFit(); …但它在我当前的项目中没有做任何事情(在没有范围的小POC沙盒应用程序中工作正常)。 说到范围,这个不起作用的原因可能与我创build单元格区域有关,如下所示: var rowRngMemberName = _xlSheet.Range[_xlSheet.Cells[1, 1], _xlSheet.Cells[1, 6]]; rowRngMemberName.Merge(Type.Missing); rowRngMemberName.Font.Bold = true; rowRngMemberName.Font.Italic = true; rowRngMemberName.Font.Size = 20; rowRngMemberName.Value2 = shortName; …然后添加“正常”/通用单元格值。 换句话说,我具有跨越多列的值 – 几行。 然后在下面,我回到“一格一格”的模式。 这是问题吗? 如果是的话,我该如何解决呢? 是否可以有一个电子表格的独立部分的格式(自动assembly)不受表格的其他部分的影响? UPDATE 至于获得多行来容纳一个值,我使用这个代码: private void AddDescription(String desc) { int curDescriptionBottomRow = curDescriptionTopRow + 3; var […]

如何在导出Excel文件时指定单元格格式为“文本”

我试图通过使用.ToString()将数据添加到数据表时导出Excel文件。 Excel文件单元格格式不是文本,而是General格式。 这是我的代码。 public static void CreateExcel(string filename,System.Data.DataTable table) { if (filename != "") { Application xlApp = new Microsoft.Office.Interop.Excel.Application(); xlApp.DisplayAlerts = false; if (xlApp == null) { return; } Workbook xlWorkBook; Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Worksheet)xlWorkBook.Worksheets.get_Item(1); int Row = table.Rows.Count; int Column = table.Columns.Count; for (int i […]

从列中获取不同的值

必须获取每列不同的数据,并使用Excel.interop存储到Dictionary(或数组)。 我已经尝试了下面的代码,但它不与Excel.interopalignment。 var excel = new ExcelQueryFactory("worksheetFileName"); var distinctNames = (from row in excel.WorkSheet() select row["ColB"]).Distinct(); 请提供Excel.Interop片段/代码以逐列获取不同的值并将其存储在数组中。

如何隐藏Excel中的行?

我有这个代码来隐藏某些行: private static readonly Double DISPLAYED_HIDDEN_CUTOFF_VAL = 0.01; private bool _hide; . . . _hide = racda.TotalItemPercentageOfItem < DISPLAYED_HIDDEN_CUTOFF_VAL; if (_hide) { var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curDescriptionTopRow, ITEMDESC_COL], _xlSheet.Cells[_curDescriptionTopRow, TOTALS_COL]]; hiddenRange.EntireRow.Hidden = true; } 代码到达时应该是,但它没有效果:这些行仍然可见。 我希望他们在电子表格上,但默认情况下不可见。 我怎么能做到这一点? UPDATE 这也没有工作: hiddenRange.Rows.Hidden = true; 实际上,这导致应用程序崩溃: hiddenRange.Hidden = true; 更新2 即使这些试图完成它的偷偷摸摸的方法也没有做任何事情: //hiddenRange.RowHeight = 0; <= did nothing hiddenRange.Rows.RowHeight = […]

如何将值(不只是百分比)添加到Excel饼图?

我有这个代码: private void WriteChartSheet() { _xlSheetChart = (Worksheet)_xlSheets.Item[2]; if (_xlSheetChart != null) { _xlSheetChart.Name = ProduceUsageChartSheetName; // Contract vs. non-Contract pie chart _xlSheetChart.Cells[1, 1] = "Contracted Items"; _xlSheetChart.Cells[1, 2] = "Non-Contracted Items"; _xlSheetChart.Cells[2, 1] = GetContractedItemsTotal(); _xlSheetChart.Cells[2, 2] = GetNonContractedItemsTotal(); ChartObjects xlCharts = (ChartObjects)_xlSheetChart.ChartObjects(Type.Missing); ChartObject contractChartObject = xlCharts.Add(0, 0, 300, 250); // left, top, width, […]

如何使用Microsoft.Office.Interop在Visual Studio中引用Excel NamedRange

我正在使用ExcelDNA从VBA转换到VB.NET的Excel加载项。 在我的代码中,我试图通过它的名字来引用一个NamedRange(就像我可以在VBA中)来设置该名称的'ReferTo'属性。 但是,我得到一个错误,它不能转换我提供给一个整数的名称。 错误:从string“MyNamedRangeName”到types“整数”的转换无效。 在下面的代码中,您可以看到错误发生的位置以及原因。 Imports Microsoft.Office.Interop Imports ExcelDna.Integration Public Class Class1 Sub SetReferToProperty() Dim ap As Excel.Application = ExcelDnaUtil.Application Dim wb as Excel.Workbook = ap.ActiveWorkbook 'This is where the error occurs. Apparently, I can't (?) refer to 'the NamedRange by it's name. I need to use it's index. wb.Names("MyNamedRangeName").RefersTo = 0 'If I use […]

C#设置Excel图表源码

我正在尝试做一些事情,但是很难过。 想法是,我只是循环槽excel工作表,并find所有图表,设置它的来源,然后将该表移动到工作簿的末尾。 我正在使用C#和Microsoft.Office.Interop.Excel 编辑 我之所以需要foreach循环,是因为我不知道在图表上有多less图表,因为我希望允许用户只在图表中放置图表,在从SQLdynamic获取数据并将其放入另一个图表我需要更新这些图表 这是我到目前为止所尝试的 // Get source for charts Excel.Range ChartSourceRange = xlWorkSheet3.Range["A4", "G5"]; // Here becomes the problem …I don't know how to go foreach in excel sheet foreach (Microsoft.Office.Interop.Excel.ChartObject item in xlWorkBook.Sheets[2]) { item.Chart.SetSourceData(ChartSourceRange); } int totalSheets = xlWorkBook.Sheets.Count; xlWorkBook.Sheets[2].Move(xlWorkBook.Sheets[totalSheets]); 这段代码给我例外… Unable to cast COM object of type 'System.__ComObject' to interface […]

在VB.NET表单的Excel工作表中实时更新数据

我有一个VB.NET与.NET 4.5的表单。 我有一个EXCEL文件并排打开的窗体。 我想在EXCEL表格中看到来自代码LIVE的更新数据。 但不能看到数据。 下面是代码 Imports Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Me.OpenFileDialog1.ShowDialog() Dim xlApp As Application Dim xlWorkBook As Workbook Dim xlWorkSheet As Worksheet xlApp = New ApplicationClass 'xlApp.ScreenUpdating = False xlWorkBook = xlApp.Workbooks.Open("E:\BACKUP\TRY.xls") xlWorkSheet = xlWorkBook.Worksheets("Sheet1") 'display the cells value B2 MsgBox(xlWorkSheet.Cells(8, […]

Excel Interop工作表SelectionChange不附加在打开的工作簿上

在Excel 2010中,使用excel dna和excel interop我附加到每个工作表的select更改。 我正在使用app.WorkbookActivate并试图枚举打开的工作簿。 它通过工作簿激活适用于新的书籍/工作表。 但是 – 对于打开的工作簿它不附加。 没有错误,它只是不起作用 如果您打开一个新的工作簿,然后切换回来,它将附加到该原始工作簿 任何人知道为什么 这是代码。 using ExcelDna.Integration; using XL = Microsoft.Office.Interop.Excel; …. /// in an init method //add event listeners to open work books and on new work books XL.Application xlapp = (XL.Application)ExcelDnaUtil.Application; xlapp.WorkbookActivate += Xlapp_WorkbookActivate; ListenOnOpenWorkBooks(); private static void ListenOnOpenWorkBooks() { XL.Application xlapp = (XL.Application)ExcelDnaUtil.Application; foreach […]