日期:2014-05-19  浏览次数:20840 次

关于用c#读取、另存excel的问题。
现在有这样一个需求,有个客户要求我们公司的信息编辑人员根据他提供的模板excel文件建立一份价格数据表,格式是固定的,这个excel有2个sheet,这2个sheet比较复杂的。

每个sheet有部分数据可以从我司的价格数据库中读取,有部分数据则要进行人工计算的,所以我的打算是把需要人工计算的部分做成网页,让信息编辑手工录入,可以从数据库里面获取的价格信息我帮他从数据库里面提取出来,这样数据要求就ok了。

但是怎么把这些数据弄进这2个极其复杂的sheet中,比较麻烦,如果靠手工的录入,非烦死人不可,所以我想了个偷懒的办法,也就是群发email的办法。

首先读取这个xls文件,然后将里面需要数据填充的单元格以变量名代替,接下来根据要求分门别类的把数据替换进去,最后再另存为一个新的xls文件,通过程序作为email的附件发送给客户。

现求c#打开excel的方法,包括读取,以及查找、替换单元格,还有就是另存的算法。谢谢。

------解决方案--------------------
建议不要操作EXCEL,从OFF2007开始,所有文件好像都成为XML格式了,你把数据存为XML得了,用EXCEL也能打开,把扩展名存为XLS就行了
------解决方案--------------------
Excel.Application xApp = new Excel.ApplicationClass();

Excel.Workbook xBook = xApp.Workbooks.Open(Server.MapPath( "aaa.xls "), Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//打开EXCEL

Excel.Worksheet xSheet = (Excel.Worksheet)xBook.Sheets[ "Input "];//得到Sheet

xSheet.get_Range( "M1 ", Missing.Value).Value2 = Value;//单个单元格替换
object [,] M9_M37 = new object[29,1];
xSheet.get_Range( "M9:M37 ", Missing.Value).Value2 = M9_M37;//数组方式替换

xBook.SaveCopyAs(Server.MapPath(filePath + "/bb.xls "));//另存

xBook.Close(false, Missing.Value, Missing.Value);//关闭
xSheet = null;
xBook = null;
xApp.Quit();
xApp = null;

需要引用Excel组件
------解决方案--------------------
给您一个“读写Excel文件”的例子:
1、在 Microsoft Visual Studio .NET 的“文件”菜单上,单击“新建”,然后单击“项目”。
2、在“新建项目”对话框中,选择“Visual C#项目”,再选择“Windows 应用程序”模板。
3、键入 ExcelApp 作为该程序的名称,然后单击确定。
4、在“解决方案资源管理器”的ExcelApp项目,鼠标右击“引用”,点击“添加引用”,在COM中选择“Microsoft Excel 10.0 Object Library”。
5、在Form1.cs的视图设计器中,添加如下控件:
控件类型 控件名称  控件属性 属性值
Button button1 Text 生成一个Excel文件
Button button2 Text 给Excel添加工作表
Button button3 Text 给Excel删除工作表
Button button4 Text 改变工作表行和列大小
6、在Form1.cs的代码设计器中,引用添加如下代码
using System.Reflection;
7、在Form1.cs的视图设计器中,选中button1,在属性框中选中事件,双击Click,在Form1.cs的代码设计器中,添加修改如下代码
private void button1_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
SaveFileDialog1.Filter = "Excel文件(*.xls)|*.xls ";
if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
{
string[,] myData = {
{ "车牌号 ", "类 型 ", "品 牌 ", "型 号 ", "颜 色 ", "附加费证号 ", "车架号 "},
{ "浙KA3676 ", "危险品 ", "货车 ", "铁风SZG9220YY ", "白 ", "1110708900 ", "022836 "},
{ "浙KA4109 ", "危险品 ", "货车 ", "解放CA4110P1K2 ", "白 ", "223132 ", "010898 "},
{ "浙KA0001A ", "危险品 ", "货车 ", "南明LSY9190WS ", "白 ", "1110205458 ", "0474636 "},
{ "浙KA0493 ", "上普货 ", "货车 ", "解放LSY9190WS ", "白 ", "1110255971 ", "0094327 "},
{ "浙KA1045 ", "普货 ", "货车 ", "解放LSY9171WCD ", "蓝 ", "1110391226 ", "0516003 "},
{ "浙KA1313 ", "普货 ", "货车 ", "解放9190WCD ", "蓝 ", "1110315027 ", "05