复制一个公式 – 并将其应用到一个新的单元格区域
所以这就是我所经历的。 我正在使用Excel的DLL与C#为了进入一个大的和讨厌的Excel表,以便其他人不必。
我们在一个单元格中有一个相当大的公式,因此我们不想将它复制到每一行。 该公式在放置的行上使用多个值。 如果它在行1上,则使用该行中的大量单元格。
当在Excel中正常复制此公式时,单元格的新范围将被修改以反映新的起始位置。
问题是,当我复制这样的公式,它仍然给我所有的价值,必须做的第一行,而不是我粘贴的行…..这是我的代码:
sheet.Cells[77][row].Formula = sheet.Cells[77][1].Formula;
有人可以让我知道如何使公式适用于新行而不是第1行吗?
这可能会工作,因为它从VBA工作…在大多数情况下。
sheet.Cells[77][row].FormulaR1C1 = sheet.Cells[77][1].FormulaR1C1;
这是可行的,因为FormulaR1C1 (不是一个非常有用的链接)使用R1C1表示法,它描述了与当前单元格有关的引用单元格的位置,而不是说明要使用哪个单元格。 这意味着实际的引用依赖于具有公式的单元格。 当你使用Formula
,你需要复制Formula
的string,包括硬编码的单元格引用。
你可以使用Application.ConvertFormula
所以,假设我的单元格=单元格77有一个公式,说=Sum(B77,C77)
(来自同一行的单元格)。
如果想要将它复制到它下面的单元格中,则可以执行如下操作:
string formula = Sheet1.Cells[77][2].Formula; Sheet1.Cells[77][2].Formula = app.ConvertFormula(formula, XlReferenceStyle.xlA1, XlReferenceStyle.xlR1C1, XlReferenceType.xlRelative, Sheet1.Cells[77][3]);
完整的控制台应用程序工作(你需要修改单元格)。
static void Main(string[] args) { var app = new Microsoft.Office.Interop.Excel.Application(); var workbook = app.Workbooks.Open(@"C:\Users\user\Desktop\Book1.xlsx"); Microsoft.Office.Interop.Excel.Worksheet Sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item("Sheet1"); string formula = Sheet1.Cells[5][3].Formula; Sheet1.Cells[5][4].Formula = app.ConvertFormula(formula, XlReferenceStyle.xlA1, XlReferenceStyle.xlR1C1, XlReferenceType.xlRelative, Sheet1.Cells[5][3]); workbook.SaveAs(@"C:\Users\user\desktop\test.xlsx"); workbook.Close(); }
您可以根据自己的喜好修改ConvertFormula
方法的第三和第四个参数。 阅读更多关于这里的方法: ConvertFormula 。
如果您想要在多行上对公式进行拉伸,可以尝试使用range.AutoFill()
嗨,大家好发表这个,因为这个代码是用来复制公式在Excel中的单元格后面:
public void copy_Formula_behind_cell() { Excel.Application xlapp; Excel.Workbook xlworkbook; Excel.Worksheet xlworksheet; Excel.Range xlrng; object misValue = System.Reflection.Missing.Value; xlapp = new Excel.Application(); xlworkbook =xlapp.Workbooks.Open("YOUR_FILE", 0, true, 5, "", "",true,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlworksheet = (Excel.Worksheet)xlworkbook.Worksheets.get_Item(1); string sp = xlworksheet.Cells[3,2].Formula;//It will Select Formula using Fromula method// xlworksheet.Cells[8,2].Formula = xlapp.ConvertFormula(sp,XlReferenceStyle.xlA1, XlReferenceStyle.xlR1C1, XlReferenceType.xlAbsolute, xlworksheet.Cells[8][2]); //This is used to Copy the exact formula to where you want// xlapp.Visible = true; xlworkbook.Close(true, misValue, misValue); xlapp.Quit(); releaseObject(xlworksheet); releaseObject(xlworkbook); releaseObject(xlapp); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } }
- 不能将types“对象”隐式转换为“Microsoft.Office.Interop.Excel.Worksheet”。 存在明确的转换(您是否缺less演员?)
- 错误:不能selectDatePicker上的浮动VSTO加载项之外的date
- 改变Excel文件在C#中的单元格值?
- 是否有可能加载一个Excel文件到内存?
- C#将csv转换为xls(使用现有的csv文件)
- 如何将DataTable插入(绑定)到Excel工作簿(VS Excel 2010工作簿项目)
- 数据表自动转换为“0.000095”至“9.5E-05”
- 如何使用剪贴板将数据从.NET应用程序移动到Excel?
- 如何将数据从数据集导出到c#中的行可扩展的Excel?