Tag: excel interop

Interop Excel范围公式赋值与string连接

当试图给Range.Formula分配一个串联的string,不起作用,但简单的string完美。 工作代码: string formula = string.Format("=Round1!D{0} + Round2!D{0}", cellId); myRange.Formula = formula; 失败代码: string formula = string.Format("=Round{0}!D{1}!", 1, cellId); for (int i = 2; i <= numRounds; i++) formula += string.Format(" + Round{0}!D{1}!", i, cellId); myRange.Formula = formula; ¿WTF? 的xD 这使得无法生成配方dinamicly 先谢谢你。

如何更改这些Excel Interop数据透视表的行和列字段上自动添加的标签的文本?

我有一个允许用户过滤行的行字段: pvt.PivotFields("Description").Orientation = XlPivotFieldOrientation.xlRowField; …以及允许用户过滤列的列字段: var monthField = pvt.PivotFields("MonthYr"); monthField.Orientation = XlPivotFieldOrientation.xlColumnField; …但生成数据透视表时,它显示“行标签”,我希望它说“说明”和“列标签”,我想要它说“月”: 我怎样才能将这个默认/简单的香草语言更改为我的自定义标签文本? 更多的上下文,显示更多的代码: PivotTable pvt = pc.CreatePivotTable(_xlPivotTableSheet.Range["A6"], "PivotTable"); pvt.MergeLabels = true; // The only thing I noticed this doing was centering the heading labels pvt.PivotFields("Description").Orientation = XlPivotFieldOrientation.xlRowField; var monthField = pvt.PivotFields("MonthYr"); monthField.Orientation = XlPivotFieldOrientation.xlColumnField; monthField.DataRange.Interior.Color = ColorTranslator.ToOle(Color.LightBlue); 我有与“YYYYMM”列标题相同的问题,如“201509”和“201510”; 我希望这些是“2015年9月”和“2015年10月”(等)。 确实,这是源数据(“201509”和“201510”等)中包含的字面值,但是我想知道是否有办法在这里按摩这些值而没有太多麻烦。 必须有一种方法来为这些标签指定一个值,或者至less不显示它们,但是控制这些标签的是哪个对象的属性?

为什么Excel改变我的date显示值,我怎么能阻止它做到这一点?

看来,Excel正在将我分配给单元格的值(例如“Sep 15”)更改为“15-Sep” 我有代码应该以我想要的格式( MMM yy )分配val: internal static string GetMMMYYFromYYYYMM(String YYYYMMVal) { // code from http://stackoverflow.com/questions/40045761/how-can-i-convert-a-string-in-the-format-yyyymm-to-mmmyy DateTime intermediateDate = DateTime.ParseExact(YYYYMMVal, "yyyyMM", CultureInfo.InvariantCulture); return intermediateDate.ToString("MMM yy"); } …这样调用: var monthYearCell = _xlPivotDataSheet.Cells[_lastRowAddedPivotTableData + 1, 4]; monthYearCell.Value2 = GetMMMYYFromYYYYMM(MonthYear); …但数据仍被写入/显示为“YY-MMM”,如“15-Sep” 在上面两行直接执行后,我debugging了monthYearCell的值,发现monthYearCell对象的“Text”属性确实是“15-Sep”; 它应该是“9月15日”,因为这是GetMMMYYFromYYYYMM()辅助方法返回的GetMMMYYFromYYYYMM() 。 Excel很明显(对吧?)将值从“9月15日”改为“15-Sep”等等。 我认为Excel必须在幕后或其他方面“自动修正” 这让我想起我曾经看过的一部电影(“红人”也许?),当主编改变他写的内容时,主angular变成半弹道。 我经常对Word和Excel感觉如此。 我怎么能告诉Excel(假设这是个问题),让它独自一人 – “我写的,我写的”? 我曾尝试将原始"YYYYMM"格式的值更改为之前我想要的值: monthField.NumberFormat = "MMM yy"; …但是,将“201509”,“201510”等的值更改为“9月51日”

工作线程中Excel Interop性能下降

在工作线程中遇到了非常慢的Excel Interop性能。 这里是我在VSTO项目中的代码,它只是读取指定单元格的值(例如'Sheet1!A1'): private object test(string sheetRange = "Sheet1!A1") { var targetRange = sheetRange.Split('!'); if (targetRange.Length != 2) { return null; } var sheetname = targetRange[0]; var address = targetRange[1]; var workbook = Application.ActiveWorkbook; var sheet = (Excel.Worksheet)workbook.Worksheets[sheetname]; var cell = sheet.Range[address]; return cell.Value; } 当我在UI线程中运行这个代码时,它运行得非常快。 但一旦它在工作线程中运行,性能是相当可怕的(约x50 – x100慢)。 Thread thread = new Thread(() => […]

Excel到PDF使用互操作

我使用互操作将excel文件转换为pdf。 我有一个工作代码。 但在将其保存为pdf之前。 它提示一个对话框,要求用户“保存对文件的更改或不”我如何避免此提示? 如何在保存完成后closuresexcel? 谢谢 public string ExceltoPdf(string excelLocation, string outputLocation) { try { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = false; Microsoft.Office.Interop.Excel.Workbook wkb = app.Workbooks.Open(excelLocation); wkb.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, outputLocation); wkb.Close(); app.Quit(); return outputLocation; } catch (Exception ex) { Console.WriteLine(ex.StackTrace); throw ex; } }

Excel Interop如何设置列宽?

我成功地使用Microsoft.Office.Interop.Excel库写入Excel范围,设置字体颜色等。 有一件事我无法做到:设置列宽。 无法findF#特定的文档,并调整我发现的C#似乎并没有工作。 例如,这个代码不起作用: worksheet.Columns.AutoFit() 而这行代码甚至没有编译: worksheet.Columns.[1].Columnwidth <- 15.0 有什么build议么?

C# – Microsoft.Office.Interop.Excel.Sheets到Microsoft.Office.Interop.Excel.Worksheet

我想创build一个Excel文件的Worksheet数组,但我找不到正确的强制转换。 这是代码: Excel.Application app = new Excel.Application(); Excel.Workbook book = app.Workbooks.Open(pathFile); int numSheet = book.Worksheets.Count; Excel.Worksheet[] sheets = new Excel.Worksheet[numSheet]; sheets = (Excel.Worksheet[])book.Worksheets; 正如你从代码中看到的那样,我尝试了这个演员,但是这是多余的。 我该如何解决这个问题?

有没有办法从ExcelWorkBook获得byte ,而不是先保存到磁盘

我正在使用Microsoft.Office.Interop.Excel在C#中创buildExcel文件,追加数据,更改格式和所有。 现在我将数据保存到文件中,但是我想要将字节写入stream中,所以基本上我不想将它写入文件,然后打开它,然后将其写入stream中。 我只是想从Excel工作簿中的数据写入字节数组,然后返回它。 所以我现在做的是 xlWorkBook.SaveAs(path, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); 我想说这样的xlWorkBook.GetBytes(); 。 所以byte[]将等于从excel文件和FileStream得到的byte[] 。 提前致谢。

Excel CodeModule不保存添加的代码

我有数以百计的Excel文件,需要扩展代码和新的工作表。 当我第一次添加代码时,它可以正确保存。 不幸的是,代码包含了需要添加的表单的引用。 所以我必须添加表格之前…但是,然后发生问题,添加的代码不保存在工作簿中。 即使手动添加表单…我无法以任何方式添加代码。

如何将值设置为二维Excel范围?

我需要从特定格式的testing用例列表中构build一个Excel表格,以便将其上传到服务器。 我很高兴在文件中填充“期望”和“实际”的二维范围。 我使用相同的方法来填充标题,这是一个一维数组,和步骤(这是两个dims)。 stream程是: 打破TestCase范围(一些标题+步骤)。 让我们说:第一次迭代A1到E14。 在头文件的testCase范围内(例如:A1到C1),删除一个子(本地)范围。 在头文件的testCase范围内放弃另一个sub(local)范围(在我的例子中:D1到E14)。 用testing用例值(标题和步骤)填充两个子范围。 重复取消下一个电子表格范围(在我的情况下是A14到E28),使用相同的本地范围(步骤2-3),并填充它们,等等。 源值是一个代表testing用例步骤的字典(key = expected和value = actual)。 这是我使用的代码: public class TestCase { public Dictionary<string, string> steps; } Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); Workbooks workBooks = excelApp.Workbooks; Workbook workbook = workBooks.Add(XlWBATemplate.xlWBATWorksheet); Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; excelApp.Visible = true; foreach (TestCase testCase in TestCaseList.Items.GetList()) { Range worksheetRange = GetRangeForTestCase(worksheet); […]