在excel中写入单元格的功能

时间:2015-06-09 14:05:10

标签: c# excel nullreferenceexception

我从这里获得了一些代码:http://forum.codecall.net/topic/71788-reading-excel-files-in-c/它工作正常并且易于理解。它只能读取excel细胞,我也想写一些。 所以我想在我的主要内容中执行此操作:excel_setValue(" C10"," 520");

这就是我尝试的功能:

    private static Microsoft.Office.Interop.Excel.ApplicationClass appExcel;
    private static Workbook newWorkbook = null;
    private static _Worksheet objsheet = null;


static string excel_setValue(string cellname, string value)  
        {
            if (objsheet.get_Range(cellname).get_Value().ToString() == string.Empty) // Here is error
            {
                Console.WriteLine("watch out u trying to overwrite files");
            }
            else
            {
                objsheet.get_Range(cellname).set_Value(value);
            }         
        }

它告诉我:NullReferenceExpection未处理 - 对象引用未设置为对象的实例。

当我只提出这个时我得到的另一个错误:

static void excel_setValue(string cellname, string value)
        {
            //if (objsheet.get_Range(cellname).get_Value().ToString() == string.Empty)
            //{
            //    Console.WriteLine("kijk uit je probeerd cellen te overschrijven");
            //}
            //else
            //{
                objsheet.get_Range(cellname).set_Value(value);
            //}         
        }

错误:未处理COMException:来自HRESULT的异常:0x800A03EC

我如何调用我的excel_setValue:

excel_init("C:\\");
excel_setValue("B10","520");

excel_init:

static void excel_init(String path)
        {
            appExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();

            if (System.IO.File.Exists(path))
            {
                // then go and load this into excel
                newWorkbook = appExcel.Workbooks.Open(path, true, true);
                objsheet = (_Worksheet)appExcel.ActiveWorkbook.ActiveSheet;
            }
            else
            {
                Console.WriteLine("Unable to open file!");
                System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel);
                appExcel = null;
            }

        }

1 个答案:

答案 0 :(得分:1)

如您在方法c d d 中链接的代码所示,您需要初始化excel_init。它在链接中的这一行完成:

objsheet

在您的问题中进行此修改:

objsheet = (_Worksheet)appExcel.ActiveWorkbook.ActiveSheet;

这是您正在使用的执行顺序吗?您必须先调用How I call my excel_setValue: excel_setValue("B10","520"); excel_init("C:\\"); 并初始化objsheet,然后才能在excel_init中使用它。

您可能错误地使用了get_Range,有关更多示例,请参阅this question

您还错误地使用了Range.set_Value,请尝试使用excel_setValue