首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >System.NullReferenceException: Excel C#

System.NullReferenceException: Excel C#
EN

Stack Overflow用户
提问于 2020-11-28 07:03:34
回答 1查看 45关注 0票数 0

我已经编写了一个处理打开、写入和关闭Excel文件的类。

Excel类中的方法正由另一个调用调用。当我第一次调用addDatatoExcel方法时,一切都正常,但是当我再次调用它时,我得到一个"System.NullReferenceException: Excel C#“。VB说我正在传递一个空对象。我知道错误是什么,我只是想不出如何防止它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ExcelFile
{
    public static ExcelFile C1;
    private string excelFilePath = "‪‪C:\\Final.xlsx";
    private int rowNumber = 1; // define first row number to enter data in Excel

    Excel.Application excelApp;
    Excel.Workbook excelWorkbook;
    Excel.Worksheet excelWorksheet;
    int ExcelCounter = 0;
    int checker = 0;
    string str4 = "h";
    
    public   void openExcel()
    {
        excelApp = null;

        excelApp = new Excel.Application(); // create Excel App
        excelWorkbook = excelApp.Workbooks.Add();
        
        excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets.Add();
    }

    public void addDataToExcel(string str4)
    {
        excelWorksheet.Cells[5, 1] = str4;
                      
        ExcelCounter++;
    }

    public void closeExcel()
    {
        excelWorkbook.Close();
        excelApp.Quit();

        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelWorksheet);
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelWorkbook);
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelApp);

        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}

我希望能够将数据添加到创建的第一个Excel工作表中。

这是调用Excel类中的函数的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void AddTextToLabel(string str)
{
        ExcelFile _Excel = new ExcelFile();
        
        if (flag == 1) // Celsius 
        {
            //list Adding Function 1;                
            temp = Double.Parse(str);
            
            x++;
            list.Add(x, temp);
            zedGraphControl1.Invalidate();
            CreateChart(zedGraphControl1);
            //Example();
            
            if (Excelcounter == 0)
            {
                _Excel.openExcel();
                Excelcounter++;
            }
            
            _Excel.addDataToExcel(str);

            if (Excelcounter == 15)
            {
                _Excel.closeExcel();
            }
        }
}

我已经检查过了,传递给addDatatoExcel的变量str不是空的。还有其他参数在第二次调用函数时更改为null。这是因为我没有在每次调用AddDatatoExecl();之间保存Excel文件吗?

第一次调用函数

第二次调用函数

我是C#的新手,所以请具体一点。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-28 07:09:18

您只在第一次打开Excel:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Each time, you call this:
ExcelFile _Excel = new ExcelFile();
...
//The first time, this is called
if (Excelcounter == 0)
{
       _Excel.openExcel();
       Excelcounter++;
}

下一次调用AddTextToLabel函数时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// A new instance is created
ExcelFile _Excel = new ExcelFile();

// The excel counter is not 0 so the  _Excel.openExcel() will not be called.
if (Excelcounter == 0)

将您的代码更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  // Now your excel file is an instance member
  // as is your Excelcounter 
  ExcelFile _Excel = new ExcelFile();
  public void AddTextToLabel(string str)
        {
       
            if (flag == 1) // Celcuis 
            {
                //list Adding Function 1;                
                temp = Double.Parse(str);
                
                x++;
                list.Add(x, temp);
                zedGraphControl1.Invalidate();
                CreateChart(zedGraphControl1);
                //Example();
                
                
                if (Excelcounter == 0)
                {
                    _Excel.openExcel();
                    Excelcounter++;
                }
                
                _Excel.addDataToExcel(str);

                if (Excelcounter == 15)
                {
                    _Excel.closeExcel();
                }


            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65047249

复制
相关文章
C#操作Excel
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Interop.Excel; using System.Reflection; namespace ListToExcel { class Program { static List<objtype> objs = new List<objtype>();
liulun
2022/05/09
3610
C# excel转换Json
参考案例:https://www.cnblogs.com/fengxiang/p/3551621.html
全栈程序员站长
2022/06/30
6620
C# excel转换Json
C# excel文件导入导出
在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获!
zls365
2020/08/19
3.7K0
C# excel文件导入导出
C# NPOI导出Excel和EPPlus导出Excel比较[转]
在类库References右键Manage NuGet Packages...,之后选择添加对应的dll。
谭广健
2019/04/02
4.3K0
C#使用NOPI导入Excel
附赠一个winform导入Excel的Demo。 https://github.com/yimogit/NopiExcelDemo
易墨
2018/09/14
1.3K0
C#实现Excel模板导出和从Excel导入数据
      午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.
用户1055830
2018/01/18
4.1K0
C#实现Excel模板导出和从Excel导入数据
c# 导入导出excel表格式
c#使用代码导入excel时,当遇到纯数字且大于15位时会出现编码混乱(表现为科学计数法),要想呈现与excel表中纯数字格式和在数据库中呈现纯数字,操作如下:
wfaceboss
2019/04/08
1.6K0
c# 导入导出excel表格式
【C#】Excel舍入函数Round、RoundUp、RoundDown的C#版
本人在C#中进行小数舍入的时候常常会怀念Excel中的Round、RoundUp、RoundDown这几个函数,原因就是后者“接地气”,比较符合俺小老百姓的舍入要求,啥“银行家舍入法”就让银行家用去吧。今儿有空,就把它实现了一下,先温习一下这几个Excel函数的功能:
AhDung
2018/09/13
1.8K0
C# 如何在Excel 动态生成PivotTable
Excel 中的透视表对于数据分析来说,非常的方便,而且很多业务人员对于Excel的操作也是非常熟悉的,因此用Excel作为分析数据的界面,不失为一种很好的选择。那么如何用C#从数据库中抓取数据,并在
牛嗷嗷
2018/03/30
1.1K0
C# 使用 NPOI 库读写 Excel 文件
NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件。在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx。官网提供了一份 Examples,给出了很多应用场景的例子,打包好的二进制文件类库,也仅有几MB,使用非常方便。
跟着阿笨一起玩NET
2018/09/19
9K1
002 C# 写入Excel,Word,Ppt完整攻略
在项目-添加引用,分别选择Microsoft Excel 16.0 Object Library、
职场编码
2020/05/24
2.9K0
002 C# 写入Excel,Word,Ppt完整攻略
C#将数据以XML格式写入Excel
本文转载:http://www.cnblogs.com/eflylab/archive/2008/09/21/1295580.html
跟着阿笨一起玩NET
2018/09/19
1.6K0
C#将数据以XML格式写入Excel
C# dotnet WPF 使用 OpenXml 解析 Excel 文件
在 2013 微软开源了 OpenXml 解析库,在微软的 Excel 文档,使用的文档格式就是国际规范的 OpenXml 格式。这个格式有很多版本,详细请看百度。因为表格文稿使用的是 OpenXml 在 .NET 开发可以非常简单将 Excel 文档进行解析,大概只需要两句话
林德熙
2020/04/08
1.3K0
c#:winform读取excel,并显示在griddataview
立羽
2023/08/24
1.4K0
c#:winform读取excel,并显示在griddataview
在c#项目中用NPOI导出excel
用NPOI导出excel(加载的是已有的excel模板,当然也可以创建空的excel)具体步骤:
全栈程序员站长
2022/07/05
9380
在c#项目中用NPOI导出excel
Unity Excel转json且自动生成C#脚本
生成的json文件: [{“ID”:“10001”,“Name”:“a”,“Explain”:“卡牌a”},{“ID”:“10002”,“Name”:“b”,“Explain”:“卡牌b”},{“ID”:“10003”,“Name”:“c”,“Explain”:“卡牌c”},{“ID”:“10004”,“Name”:“d”,“Explain”:“卡牌d”},{“ID”:“10005”,“Name”:“e”,“Explain”:“卡牌e”},{“ID”:“10006”,“Name”:“f”,“Explain”:“卡牌f”},{“ID”:“10007”,“Name”:“g”,“Explain”:“fas”},{“ID”:“10008”,“Name”:“h”,“Explain”:“gbfdsg”},{“ID”:“10009”,“Name”:“i”,“Explain”:“ewtg”},{“ID”:“10010”,“Name”:“j”,“Explain”:“sgs”},{“ID”:“10011”,“Name”:“k”,“Explain”:“mje”},{“ID”:“10012”,“Name”:“l”,“Explain”:“归属感”},{“ID”:“10013”,“Name”:“m”,“Explain”:“格式”},{“ID”:“10014”,“Name”:“n”,“Explain”:“搞完然后与”}]
全栈程序员站长
2022/09/02
1.4K0
004 C# 将Word表格数据批量写入Excel
步骤:文件—新建—解决方案—新建控制台程序,在项目管理器右击项目名称—属性,将输出类型设置为Windows应用程序;
职场编码
2020/05/24
2.8K0
004 C# 将Word表格数据批量写入Excel
C#版[击败99.39%的提交] - Leetcode 171. Excel表列序号 - 题解
在线提交: https://leetcode.com/problems/excel-sheet-column-number/
Enjoy233
2019/03/05
4670
c#通过oledb获取excel文件表结构信息
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120335.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/18
4750
C#读取Excel表格中数据并返回datatable
在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法。 DataTable GetDataTable(string tableName,string leftTopCel,string rightbutCel) { bool hasTitle = false; OpenFileDialog openFile = new OpenFileDialog(); ope
码农阿宇
2018/04/18
2.4K0

相似问题

C# HTMLAgilityPack System.NullReferenceException

12

C#误差System.NullReferenceException

311

C# System.NullReferenceException NSoup

12

DataContext System.NullReferenceException c# xaml

11

EPPlus向Excel导出模型: System.NullReferenceException

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文