Tag: 互操作

如何在数据标签C#中使用模式属性

我正在尝试使用C#来优化数据标签 。 但是我不知道FillFormat.Pattern 。 任何人都可以帮助我,如何使用它,并形成Excel数据标签。 您的帮助将不胜感激。 这是我迄今为止所做的。 System.Collections.IEnumerator iEChartSeries = seriesCollection.GetEnumerator(); if(iEChartSeries.MoveNext()){ var oSeries = (Excel.Series)(iEChartSeries.Current); Excel.Points pts = (Excel.Points) oSeries.Points(Type.Missing); System.Collections.IEnumerator iPoints = pts.GetEnumerator(); while(iPoints.MoveNext()) { var pt = (Excel.Point)(iPoints.Current); pt.HasDataLabel = true; pt.DataLabel.Position = Excel.XlDataLabelPosition.xlLabelPositionAbove; pt.DataLabel.Font.Name = "Arial"; pt.DataLabel.Font.FontStyle = "Bold"; pt.DataLabel.Font.Size = 8; pt.DataLabel.Text = "N"; pt.DataLabel.Format.Fill.Patterned = ??;// how to get […]

将generics数组转换为特定的types

我正在使用Interop在C#中使用Excel。 我需要两个单元格。 这是我如何得到他们: cells = (Excel.Range)sheet.get_Range("V" + i, "W" + i); System.Array values = (System.Array)cells.Cells.Value; 这返回我想要的值,用foreach循环testing。 但是,我如何获得元素到stringvariables? 我试过这个: var stringValues = values.Cast<string>(); 但我不能以任何方式访问它,而不会产生错误。

在Excel中使用c#启用迭代计算模式?

如何通过C#在Excel中启用迭代计算选项? 我知道如何通过Excel内的UI,但我想让我的程序通过Excel Interop来更改它。

打开模板文件的多个副本(.Net,Excel.Interop)

我有一个程序,用户select一些数据,然后程序打开并填充保存在程序目录中的模板Excel工作簿,供用户进一步修改,写入数据库等。 代码看起来像这样: Dim ExcelApp As New Microsoft.Office.Interop.Excel.Application Dim ExcelWorkbook As Microsoft.Office.Interop.Excel.Workbook = Nothing … ExcelWorkbook = ExcelApp.Workbooks.Open(PathToTemplateSheet) … ExcelWorkbook.SaveAs(Filename:=TempFileNameToSave) 通过将工作簿保存到一个临时位置,我确保用户不会覆盖模板,但这仍然为我创build问题,因为没有2个用户可以同时工作在此工作簿上,因为工作簿TempFileNameToSave ,已经被其他用户打开了。 我的问题是,能够打开模板的多个副本 ,而不会为用户造成任何问题或覆盖旧用户的情况下,最好的方法是什么? 我的理想解决scheme是只给用户一个新的,未保存的工作簿,只有在他们的桌面上打开,然后他们可以保存它,无论他们想要/如果他们不想保存。 我想我可以做到这一点: 创build一个新的空白工作簿: ExcelApp.Workbooks.Add 如上所述打开模板 将所有工作表从一个复制到另一个 closures模板 但是,如果模板尺寸不合适,那将会非常浪费时间,我希望有一个更好的方法来完成这个任务。 谢谢!!

VB.Net – Excel COM对象没有得到释放

即使在调用ReleaseComObject和GC.Collect方法之后,我仍然面临Excel进程仍处于活动状态的问题。 我的Excel进程终止,但只有在closures用户窗体后 下面是示例代码,它显示了我所做的所有事情摆脱Excel进程: Public Class frmTEST Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim objExcel As xl.Application Dim wbReport As xl.Workbook = Nothing objExcel = CreateObject("Excel.Application") Try wbReport = objExcel.Workbooks.Open("D:\EL\Nicolas\VS Online\Classe A v2\Launcher-v2.2\Resources\Modules\Zoom.xlsm") Catch ex As Exception Common.WriteDebugLog("Exception line 44") End Try If wbReport Is Nothing Then MsgBox("Erreur d'ouverture du reporting – […]

C#.net Excel Interop离开Excel进程挂起

我们在我们的代码中的许多地方使用Excel互操作,但是我有一个似乎并没有closures它所使用的Excel过程的函数..我已经简化了代码,它似乎只要我打开工作簿在这个function,它保持悬挂。 我已经包含了下面的代码,我已经确定每个对象都被定义,释放和清零,但是Excel仍然在运行。 System.Data.DataTable dtExcelSheet = new System.Data.DataTable(); Microsoft.Office.Interop.Excel.Application excelObject = new Microsoft.Office.Interop.Excel.Application(); dtExcelSheet.Columns.Add("SheetName", typeof(string)); dtExcelSheet.Columns["SheetName"].ReadOnly = false; dtExcelSheet.Columns["SheetName"].Caption = "Sheet Name"; Workbooks wbs = excelObject.Workbooks; Workbook excelWorkbook = wbs.Add(excelFile); excelWorkbook.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value); wbs.Close(); excelObject.Quit(); int i1 = Marshal.FinalReleaseComObject(excelWorkbook); int i2 = Marshal.FinalReleaseComObject(wbs); int i3 = Marshal.FinalReleaseComObject(excelObject); excelWorkbook = null; wbs = null; excelObject = null; […]

如何在较低版本(.Net)上使用Excel Interop?

在C#中,我使用的Microsoft.Office.Interop.Excel参考v12.0.0.0,这(我认为)对应于Office 2007。 我猜我的程序不能在没有Office 2007或更高版本的计算机上运行? 我该怎么办 ?

RemoveDuplicates函数 – 如何设置多个列?

我想使用Excel.Interop的RemoveDuplicates函数,但我坚持如何传递它的列数组。 我已经知道我不能将它作为一个简单的int[]数组传递,因为它在运行时会给出一个exception,并且我可以传递一个整数并且它可以工作,但是我希望能够select在运行时使用哪些列。 我在C#中的当前代码如下所示: using Excel = Microsoft.Office.Interop.Excel; private void removeDuplicates(Excel.Application excelApp, Excel.Range range, int[] columns) { range.RemoveDuplicates(excelApp.Evaluate(columns), Excel.XlYesNoGuess.xlNo); } 如果只使用一列,它工作正常,但如果columns数组有多个值,则只使用第一个值。 在VBA中,等价的function是: Sub RemoveBadExample() Dim colsToUse colsToUse = Array(1, 2) Selection.RemoveDuplicates Columns:=Evaluate(colsToUse), Header:=xlYes End Sub 其中也没有使用这两列。 但是,如果我将其更改为: Selection.RemoveDuplicates Columns:=(colsToUse), Header:=xlYes 它工作得很好。 我想我的问题是在C#中的等价物是什么?

如何使用C#和Interop在Excel中设置locking的单元格保护选项?

这是背景信息。 我有一个应用程序写入Excel 2007的.xlsm文件,我正在使用C#和Excel 12.0互操作对象库来做到这一点,与Visual Studio 2010.我能够改变单元格的值和公式,设置字体和字体样式,设置单元格是否locking等等。我需要做的最后一件事就是设置工作表的保护,禁止selectlocking的单元格。 当我尝试称这个代码,作为一般的表保护testing… ((Excel.Worksheet)excelApp.ThisWorkbook.Sheets[0]).Protect(Password: protectionPassword, AllowFormattingCells: false); …我得到Exception from HRESULT: 0x800A03EC告诉我一个COMexception未处理。 此外,互操作保护对象不给我我上面提到的选项,虽然该选项在Excel中可用,当我点击“审查”选项卡下的“保护工作表”。 所以,现在我的问题:我如何保护在Excel中使用Excel中的Interop在closures选项AllowSelectLockedCell选项所需的工作表?

在调用SaveAs方法时出错

我想从我的C#/ Winforms应用程序中使用MS Excel Interop的Excel文件中创build一个CSV文件。 在下面的代码中的SaveAs方法得到这个错误。 '文件无法访问。 尝试以下方法之一: •确保指定的文件夹存在。 确保包含该文件的文件夹不是只读的。 •确保文件名不包含以下任何字符:<>? []:| 或*确保文件/path名称不超过218个字符 我试图在工作簿的打开(…)方法设置readonly为false: 插入数据后保存Excel文件问题 ,但仍然得到相同的错误。 在我的代码中,csv文件path是:C:\如果我将csv文件path更改为C:\ SomeFolder或一些共享的UNCpath,那么我不会得到这个错误。 请指教。如果使用C盘有一些权限问题? 这里是代码: xlApp = new Microsoft.Office.Interop.Excel.Application(); xlApp.DisplayAlerts = false; xlApp.Visible = false; wbkSrc = xlApp.Workbooks.Open(m_sSrcFil, Type.Missing, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wstSrc = (Worksheet)wbkSrc.Worksheets[sSrcSht]; //wstSrc.Activate(); rngWork = wstSrc.Cells.get_Range("H:H", System.Reflection.Missing.Value); rngWork.NumberFormat […]