前面写了C#实战021:OleDb操作-新增Excel中的sheet工作表,接下来我们就要在新增的表中添加数据了,在网上找了很多方法,都没有OleDb对excel表操作批量操作,后来通过对mysql的研究终于还是找到了合适的方法。
工具/原料
C#
Excel
方法/步骤
1、我们先来新建一个带表头的空表单,为表单先创建个表头,相当于在mysql先建立些空字段。OleDbCommandcmd=myCon.CreateCommand();//创建工作表命令stringsheetName1="刀具预估数量";if(tableName.Contains(sheetName1)){cmd.CommandText="DROPTABLE刀具预估数量";cmd.ExecuteNonQuery();//执行创建sheet的语句}cmd.CommandText="CREATETABLE刀具预估数量([序号]INTEGER,[夹位]VarChar,[刀号]VarChar,[刀具规格]VarChar,[1月]VarChar,[2月]VarChar,[3月]VarChar,[4月]VarChar,[5月]VarChar,[6月]VarChar,[7月]VarChar,[8月]VarChar,[9月]VarChar,[10月]VarChar,[11月]VarChar,[12月]VarChar)";cmd.ExecuteNonQuery();
2、建完表单我们并无法再该表中添加数据,因为这时候该表是0行的,既然没有行自然就没法再对应的单元格进行赋值的,所以我们还需要插入一定的行数,这个数量就看你的需求了,我在这里写了一个序列,相信每个表都需要有这一列吧。for(inti=1;i<sheet2Rows;i++){cmd.CommandText="insertinto刀具预估数量(序号)values("+Convert.ToString(i)+")";cmd.ExecuteNonQuery();//Console.WriteLine("这是新增的数据"+i);}
3、有了对应的行数我们就可以将该表存到内存中去了,这样内存中就有了对应的行和列的一个空表单
4、接下来就可以给对应的单元格进行赋值了,这里需要注意的是OleDb操作Excel时它的起始是0,而不是1(而且表头除外)
5、在我们将数据写入到Excel表中之前,我们最好现将数据写入对应的缓存表中,这样在后面的计算中才能找到我们所需的数据(要想计算的快,最好从缓存中提取数据,而非再次读取Excel)for(inti=1;i<sheet2Rows;i++){sheetdata4.Tables[0].Rows[i-1]["夹位"]=sheetdata2.Tables[0].Rows[i][1].ToString().Trim();//夹位sheetdata4.Tables[0].Rows[i-1]["刀号"]=sheetdata2.Tables[0].Rows[i][2].ToString().Trim();//刀号sheetdata4.Tables[0].Rows[i-1]["刀具规格"]=sheetdata2.Tables[0].Rows[i][5].ToString().Trim();//刀具规格//Console.WriteLine("成功赋值:"+i);}
6、然后我们再从缓存中区提取要写入Excel中的数据,因为是数据库读取的数据,所以墙绅褡孛数据再插入时并不能像呶蓟鹭毵Excel组件那样循环写入了,它只能一个字段字段的写入,所以这里我们只能列循环,而无法行循环。for(inti=1;i<sheet2Rows;i++){stringd1=Convert.ToString(i);stringd2=sheetdata4.Tables[0].Rows[i-1]["夹位"].ToString().Trim();stringd3=sheetdata4.Tables[0].Rows[i-1]["刀号"].ToString().Trim();stringd4=sheetdata4.Tables[0].Rows[i-1]["刀具规格"].ToString().Trim();cmd.CommandText="UPDATE["+sheetName1+"]SET夹位='"+d2+"'WHERE序号="+d1+"";cmd.ExecuteNonQuery();cmd.CommandText="UPDATE["+sheetName1+"]SET刀号='"+d3+"'WHERE序号="+d1+"";cmd.ExecuteNonQuery();cmd.CommandText="UPDATE["+sheetName1+"]SET刀具规格='"+d4+"'WHERE序号="+d1+"";cmd.ExecuteNonQuery();//Console.WriteLine("这是新增的数据"+i);}
7、这样我们就需要在对应擢爻充种的列表中写入循环就可以将数据一列列的写入到Excel表中了。由于OleDb操作对Exc髫潋啜缅el的控制性不高,所以要想把表格属性也控制好,这时候我们可以结合Excel组件来帮助我们完成,只要把处理数据这重要的部分交给OleDbl来操作即可//设置表单样式App=newExcel.Application();//创建Excel对象objectmissing=Missing.Value;//获取缺少的object类型值wb=App.Workbooks.Open(ExcelName,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);Excel.Worksheetws1=((Excel.Worksheet)wb.Worksheets["刀具预估数量"]);//方法一:指定工作表名称读取Excel.Worksheetws2=((Excel.Worksheet)wb.Worksheets["Forecast"]);//方法一:指定工作表名称读取ws1.get_Range("A1","P1").Interior.ColorIndex=14;//填充背景色ws1.get_Range("A1","P1").Borders.LineStyle=1;//设置表格的线宽ws2.get_Range("A1","P1").Interior.ColorIndex=14;//填充背景色ws2.get_Range("A1","P1").Borders.LineStyle=1;//设置表格的线宽ws1.get_Range("A1").ColumnWidth=5;//固定宽度ws1.get_Range("B1").ColumnWidth=10;ws1.get_Range("C1").ColumnWidth=10;ws1.get_Range("D1").ColumnWidth=15;ws2.get_Range("A1").ColumnWidth=5;//固定宽度ws2.get_Range("B1").ColumnWidth=25;ws2.get_Range("C1").ColumnWidth=15;wb.Save();App.Visible=true;