问题:
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();
为什么要这样写,这样写有什么意义
这是从COM协类派生的.NET接口,托管代码要求该COM互类与相应的COM对象进行互操作。使用此派生的接口访问COM对象的所有方法,属性和事件成员。但是,如果要使用的方法或事件在同一COM对象下共享相同的名称,则强制转换为相应的主接口以调用该方法,并强制转换为最新的事件接口以连接到该事件。有关COM对象的信息,请参考本主题。有关COM对象的方法和属性成员的信息,请参见_Application。
using Excel = Microsoft.Office.Interop.Excel;
Excel.Application excel;
excel = new Excel.Application();
这个写法只是加一个别名。另外建议用管理员权限打开工程调试看看