C#_VS2019求助Microsoft.Office.Interop.Excel库的用法

问题:
ApplicationClass excel = new ApplicationClass();//不需要对excel赋值
这句报错,注释掉这句前面的代码都可以运行,加上这句程序一开始就进入中断模式,前面的代码也没有被执行,点继续执行程序就直接结束了,请大神帮忙看看是什么问题

 

以下程序是在练习用C#操作Excel,但是程序不能正常运行,代码1是刚开始写的,代码2是在论坛上求助后按大神指点写的,但是还是同样中断。

 

代码1

using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Excel;


namespace OPerateExcel
{
    class Program
    {


        static void Main(string[] args)
        {

            string fileName = @"C:\Users\Administrator\Desktop\test.xlsx";
            string saveName = @"C:\Users\Administrator\Desktop\操作.xlsx";
            //set columns             Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("订单号", "A");
            dic.Add("数量", "B");
            ApplicationClass excel = new ApplicationClass();//不需要对excel赋值             Workbook wb = null;//不需要对wb赋值             excel.Visible = false;
            excel.DisplayAlerts = false;
            wb = excel.Workbooks.Open(fileName);
            Worksheet sht = (Worksheet)wb.Worksheets[1];
            int rowCount = 0;
            rowCount = sht.UsedRange.Rows.Count;
            string orderNum = string.Empty;
            string count = string.Empty;
            //循环行             for (int i = 0; i < rowCount; i++)
            {
                if (sht.Rows[1] != null)
                {
                    orderNum = sht.Cells[i, dic["订单号"]].ToString();
                    count = sht.Cells[i, dic["数量"]].ToString();
                }
            }
            //循环列             for (int i = 0; i < sht.UsedRange.Columns.Count; i++)
            {
                //sht.Columns[i];             }
            wb.Close(wb, saveName);

            Console.ReadKey();
        }
    }
} System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Excel;


namespace OPerateExcel
{
    class Program
    {


        static void Main(string[] args)
        {

            string fileName = @"C:\Users\Administrator\Desktop\test.xlsx";
            string saveName = @"C:\Users\Administrator\Desktop\操作.xlsx";
            //set columns             Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("订单号", "A");
            dic.Add("数量", "B");
            ApplicationClass excel = new ApplicationClass();//不需要对excel赋值             Workbook wb = null;//不需要对wb赋值             excel.Visible = false;
            excel.DisplayAlerts = false;
            wb = excel.Workbooks.Open(fileName);
            Worksheet sht = (Worksheet)wb.Worksheets[1];
            int rowCount = 0;
            rowCount = sht.UsedRange.Rows.Count;
            string orderNum = string.Empty;
            string count = string.Empty;
            //循环行             for (int i = 0; i < rowCount; i++)
            {
                if (sht.Rows[1] != null)
                {
                    orderNum = sht.Cells[i, dic["订单号"]].ToString();
                    count = sht.Cells[i, dic["数量"]].ToString();
                }
            }
            //循环列             for (int i = 0; i < sht.UsedRange.Columns.Count; i++)
            {
                //sht.Columns[i];             }
            wb.Close(wb, saveName);

            Console.ReadKey();
        }
    }
}

代码2,

按大神指点后修改的,不知道是不是修改的不对,反正和代码1的运行结果是一样的

using System;
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;


namespace OPerateExcel
{
    class Program
    {


        static void Main(string[] args)
        {

            string fileName = @"C:\Users\Administrator\Desktop\test.xlsx";
            string saveName = @"C:\Users\Administrator\Desktop\操作.xlsx";
            //set columns             Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("订单号", "A");
            dic.Add("数量", "B");

            Excel.Application excel;
            excel = new Excel.Application();
            Excel.Workbook wb = null;//不需要对wb赋值             excel.Visible = true;
            excel.DisplayAlerts = false;
            wb = excel.Workbooks.Open(fileName);
            Excel.Worksheet sht = (Excel.Worksheet)wb.Worksheets[1];
            int rowCount = 0;
            rowCount = sht.UsedRange.Rows.Count;
            string orderNum = string.Empty;
            string count = string.Empty;
            //循环行             for (int i = 0; i < rowCount; i++)
            {
                if (sht.Rows[1] != null)
                {
                    orderNum = sht.Cells[i, dic["订单号"]].ToString();
                    count = sht.Cells[i, dic["数量"]].ToString();
                }
            }
            //循环列             for (int i = 0; i < sht.UsedRange.Columns.Count; i++)
            {
                //sht.Columns[i];             }
            wb.Close(wb, saveName);

            Console.ReadKey();
        }
    }
} System;
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;


namespace OPerateExcel
{
    class Program
    {


        static void Main(string[] args)
        {

            string fileName = @"C:\Users\Administrator\Desktop\test.xlsx";
            string saveName = @"C:\Users\Administrator\Desktop\操作.xlsx";
            //set columns             Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("订单号", "A");
            dic.Add("数量", "B");

            Excel.Application excel;
            excel = new Excel.Application();
            Excel.Workbook wb = null;//不需要对wb赋值             excel.Visible = true;
            excel.DisplayAlerts = false;
            wb = excel.Workbooks.Open(fileName);
            Excel.Worksheet sht = (Excel.Worksheet)wb.Worksheets[1];
            int rowCount = 0;
            rowCount = sht.UsedRange.Rows.Count;
            string orderNum = string.Empty;
            string count = string.Empty;
            //循环行             for (int i = 0; i < rowCount; i++)
            {
                if (sht.Rows[1] != null)
                {
                    orderNum = sht.Cells[i, dic["订单号"]].ToString();
                    count = sht.Cells[i, dic["数量"]].ToString();
                }
            }
            //循环列             for (int i = 0; i < sht.UsedRange.Columns.Count; i++)
            {
                //sht.Columns[i];             }
            wb.Close(wb, saveName);

            Console.ReadKey();
        }
    }
}

现在又多了一个问题

using Excel = Microsoft.Office.Interop.Excel;
Excel.Application excel;
excel = new Excel.Application();

为什么要这样写,这样写有什么意义

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.application?view=excel-pia

这是从COM协类派生的.NET接口,托管代码要求该COM互类与相应的COM对象进行互操作。使用此派生的接口访问COM对象的所有方法,属性和事件成员。但是,如果要使用的方法或事件在同一COM对象下共享相同的名称,则强制转换为相应的主接口以调用该方法,并强制转换为最新的事件接口以连接到该事件。有关COM对象的信息,请参考本主题。有关COM对象的方法和属性成员的信息,请参见_Application

using Excel = Microsoft.Office.Interop.Excel;
Excel.Application excel;
excel = new Excel.Application();

这个写法只是加一个别名。另外建议用管理员权限打开工程调试看看