将 Excel 单元格从 Visual Studio 设置为 Textbox.text,引用错误 C#
Setting Excel cell to Textbox.text from Visual Studio, Reference Error 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"));
}
事情是这样的...有人将信息(在本例中是他们的名字)放入文本框中。然后他们单击按钮 1 将他们的名字导出到 excel 模板,然后将其保存在他们自己的名字中。
问题是什么时候到达
range.get_Range("D6"); /*and*/ range.Value2 = NameTake.Text;
它抛出异常说
Object reference not set to an instance of an object
当我尝试将其设置为一个实例时(即)
range = new Excel.Range();
它抛出一个错误说
Cannot create an instance of the abstract class or interface
'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"));
}
}
获取异常(针对范围):未将对象引用设置为对象的实例
您从未在代码中分配变量 range
,因此它为 null,错误是适当的。
在 VSTO 中,我致力于从当前 sheet 获取目标范围,例如:
var range = theSheet.Cells[ 1, 4 ] as Excel.Range; // [ row, column ]
在工作时验证你所拥有的不为空;它只是很好的编程。比如在使用前检查上面代码中你的workbook是否不为null。比如在我上面的例子中,我会跟着这个
if (range != null) { ... do valid operation ... }
您不需要创建范围。尝试 range = worksheet.get_Range("D6","D6");
而不是 range = new Excel.Range();
尝试用 range = worksheet.get_Range("D6");
替换 range.get_Range("D6");
这是因为您正在尝试访问 range
但它从未使用任何实际范围进行初始化。
如果您只是想设置 D6
Value2,您应该只使用 worksheet.Range("D6").Value2 = NameTake.Text;
,甚至不需要 Excel.Range
变量。
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"));
}
事情是这样的...有人将信息(在本例中是他们的名字)放入文本框中。然后他们单击按钮 1 将他们的名字导出到 excel 模板,然后将其保存在他们自己的名字中。
问题是什么时候到达
range.get_Range("D6"); /*and*/ range.Value2 = NameTake.Text;
它抛出异常说
Object reference not set to an instance of an object
当我尝试将其设置为一个实例时(即)
range = new Excel.Range();
它抛出一个错误说
Cannot create an instance of the abstract class or interface '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"));
}
}
获取异常(针对范围):未将对象引用设置为对象的实例
您从未在代码中分配变量 range
,因此它为 null,错误是适当的。
在 VSTO 中,我致力于从当前 sheet 获取目标范围,例如:
var range = theSheet.Cells[ 1, 4 ] as Excel.Range; // [ row, column ]
在工作时验证你所拥有的不为空;它只是很好的编程。比如在使用前检查上面代码中你的workbook是否不为null。比如在我上面的例子中,我会跟着这个
if (range != null) { ... do valid operation ... }
您不需要创建范围。尝试 range = worksheet.get_Range("D6","D6");
而不是 range = new Excel.Range();
尝试用 range = worksheet.get_Range("D6");
替换 range.get_Range("D6");
这是因为您正在尝试访问 range
但它从未使用任何实际范围进行初始化。
如果您只是想设置 D6
Value2,您应该只使用 worksheet.Range("D6").Value2 = NameTake.Text;
,甚至不需要 Excel.Range
变量。