从Excel中将Excel单元格设置为Textbox.text,参考错误C#

public Excel.Application xlapp = new Excel.Application(); public Excel.Range range; public Excel.Workbook workbook; public Excel.Worksheet worksheet; public string file; private void button1_Click(object sender, EventArgs e) { file = Path.Combine(Application.StartupPath, "Quote Sheet Template.xls"); xlapp.Workbooks.Open(file); workbook = (Excel.Workbook)xlapp.ActiveWorkbook; xlapp.Visible = true; range.get_Range("D6"); range.Value2 = NameTake.Text; workbook.SaveAs(Path.Combine(Application.StartupPath, NameTake.Text + " Quote.xls")); } 

所以这里的交易…有人把信息(在这种情况下,他们的名字)放入一个文本框。 然后他们点击button1将他们的名字导出到一个excel模板中,然后以自己的名字保存。

问题是什么时候到达的

  range.get_Range("D6"); /*and*/ range.Value2 = NameTake.Text; 

它抛出和exception说

你调用的对象是空的

当我尝试将其设置为实例(即)

  range = new Excel.Range(); 

它会抛出一个错误说

无法创build抽象类或接口“Microsoft.Office.Interop.Excel.Range”的实例

可能它真的很明显 你能帮我吗:)

更新代码:

  private void button1_Click(object sender, EventArgs e) { file = Path.Combine(Application.StartupPath, "Quote Sheet Template.xls"); xlapp.Workbooks.Open(file); workbook = (Excel.Workbook)xlapp.ActiveWorkbook; xlapp.Visible = true; range = worksheet.Cells["D6"] as Excel.Range; if (range != null) { //range.Value2 = NameTake.Text; workbook.SaveAs(Path.Combine(Application.StartupPath, NameTake.Text + " Quote.xls")); } } 

获取exception(对于范围):未将对象引用设置为对象的实例

您从不在代码中分配variablesrange ,因此它是空的,错误是合适的。

在VSTO中,我从当前工作表中获取目标范围,其范围如下:

 var range = theSheet.Cells[ 1, 4 ] as Excel.Range; // [ row, column ] 

在工作时validation你所拥有的不是空的; 它只是很好的编程。 比如检查上面的代码中的工作簿是否在使用前不为空。 比如在我上面的例子中,我会跟着这个

 if (range != null) { ... do valid operation ... } 

你不需要创build范围。 尝试range = worksheet.get_Range("D6","D6"); 而不是range = new Excel.Range();

尝试replacerange.get_Range("D6"); range = worksheet.get_Range("D6"); 这是因为你正在尝试访问range但它从来没有被任何实际的范围初始化。

如果你只是想设置D6你应该简单地使用worksheet.Range("D6").Value2 = NameTake.Text; 你甚至不需要一个Excel.Rangevariables。