導入EXCEL、二維數組的運用

原创 2007年10月10日 08:45:00
procedure TForm1.btnPrintClick(Sender: TObject);
var
  Lv_ExcelApp, Lv_ExcelWkBook, Lv_ExcelWkSheet: Variant;
  Lv_i, Lv_j, Lv_z, Lv_Cnt, Lv_RowStart: 
Integer;
  Lv_Sum: Real;
  Lv_MaxMonth, Lv_MaxMonthR, Lv_MaxMonthL, Lv_CurMonth: 
string;

  
function IntToYearMonth(AYearMonth: Integer): String;
  var
    Lv_Year, Lv_Month: 
Integer;
  begin
    Lv_Year :
= StrToInt(Copy(IntToStr(AYearMonth),1,4));
    Lv_Month :
= StrToInt(Copy(IntToStr(AYearMonth),5,2));
    
if Lv_Month>12 then
    begin
      Lv_Year :
= Lv_Year + Lv_Month div 12;
      
if (Lv_Month mod 12>= 10 then
        Result :
= IntToStr(Lv_Year) + IntToStr(Lv_Month mod 12)
      
else
        Result :
= IntToStr(Lv_Year) + '0' + IntToStr(Lv_Month mod 12);
      end
    
else
      Result :
= IntToStr(AYearMonth);
  
end;

  
function IntColToCharCol(AIntCol: Integer): string;
  
const
    Lv_IntChar: array[
0..25,0..1of string=(('1','A'),('2','B'),('3','C'),('4','D'),('5','E'),('6','F'),('7','G'),('8','H'),('9','I'),('10','J'),('11','K'),('12','L'),('13','M'),('14','N'),('15','O'),
                                           ('16','P'),('17','Q'),('18','R'),('19','S'),('20','T'),('21','U'),('22','V'),('23','W'),('24','X'),('25','Y'),('26','Z'));
  var
    Lv_Index: 
Integer;
  begin
    
for Lv_Index := 0 to 25 do
    begin
      
if IntToStr(AIntCol) = Lv_IntChar[Lv_Index][0then
      begin
        Result :
= Lv_IntChar[Lv_Index][1];
        Break;
      
end;
    
end;
  
end;
begin
  PageControl.ActivePage :
= QueryPage2;
  Lv_ExcelApp :
= CreateOleObject('Excel.Application');
  Lv_ExcelWkBook := Lv_ExcelApp.WorkBooks.Add;
  Lv_ExcelWkSheet :
=  Lv_ExcelWkBook.WorkSheets.Item[1];

  
with DM1.Query1 do
  begin
    Close;
    Sql.Text :
= 'select max(months) months from view_rep_01_lxx';
    Open;
    Lv_MaxMonthR :
= FieldByName('MONTHS').AsString;

    Close;
    Sql.Text :
= 'select max(months) months from view_rep_02_lxx';
    Open;
    Lv_MaxMonthL :
= FieldByName('MONTHS').AsString;

    
if StrToInt(Lv_MaxMonthR)>StrToInt(Lv_MaxMonthL) then
      Lv_MaxMonth :
= Lv_MaxMonthR
    
else
      Lv_MaxMonth :
= Lv_MaxMonthL;

    Close;
    Sql.Text :
= 'select to_char(sysdate,''yyyymm'') cur_date from dual';
    Open;
    Lv_CurMonth :
= FieldByName('CUR_DATE').AsString;
  end;

  Lv_Cnt :
= (StrToInt(Copy(Lv_MaxMonth,1,4)) - StrToInt(Copy(Lv_CurMonth,1,4))) * 12
            
+ StrToInt(Copy(Lv_MaxMonth,5,2)) - StrToInt(Copy(Lv_CurMonth,5,2)) + 1;

  Lv_ExcelWkSheet.Cells[
3,1] := '鋼種';
  Lv_ExcelWkSheet.Cells[2,2] := Lv_CurMonth + '前';
  Lv_ExcelWkSheet.Cells[3,2] := '訂單重量';
  Lv_ExcelWkSheet.Cells[3,3] := '鎳含量';
  Lv_ExcelWkSheet.Range['B2:C2'].Merge;
  for Lv_i := 0 to Lv_Cnt - 1 do
  begin
    Lv_ExcelWkSheet.Cells[
2,Lv_i * 2 + 4] := IntToYearMonth(StrToInt(Lv_CurMonth) + Lv_i);
    Lv_ExcelWkSheet.Cells[
3,Lv_i * 2 + 4] := '訂單重量';
    Lv_ExcelWkSheet.Cells[3,Lv_i * 2 + 5] := '鎳含量';
    Lv_ExcelWkSheet.Range[IntColToCharCol(Lv_i * 2 + 4)+'2:'+IntColToCharCol(Lv_i * 2 + 5)+'2'].Merge;
  end;

  
//=========================冷精===============================================
  
for Lv_j := 4 to StrGrid1.RowCount + 2 do
  begin
    Lv_ExcelWkSheet.Cells[Lv_j,
1] := '''' + StrGrid1.Cells[1,Lv_j - 3];
  end;

  
for Lv_i := 1 to StrGrid3.ColCount - 2 do  //比較次數
  begin
    
for Lv_j := 0 to Lv_Cnt do
    begin
      
if VarToStr(StrGrid3.Cells[Lv_i + 1,0]) = VarToStr(Lv_ExcelWkSheet.Cells[2,Lv_j * 2 + 2]) then
      begin
        
for Lv_z := 4 to StrGrid1.RowCount + 2 do
        begin
          Lv_ExcelWkSheet.Cells[Lv_z,Lv_j 
* 2 + 2] := StrGrid1.Cells[Lv_i * 2,Lv_z - 3];
          Lv_ExcelWkSheet.Cells[Lv_z,Lv_j 
* 2 + 3] := StrGrid1.Cells[Lv_i * 2 + 1,Lv_z - 3];
        
end;
      
end;
    
end;
  
end;

  Lv_ExcelWkSheet.Cells[StrGrid1.RowCount 
+ 3,1] := '冷精總計';
  Lv_ExcelWkSheet.Cells[StrGrid1.RowCount + 3,1].Interior.ColorIndex := 40;

  Lv_Sum :
= 0;
  
for Lv_j := 2 to (Lv_Cnt + 1* 2 + 1 do
  begin
    
for Lv_i := 4 to StrGrid1.RowCount + 2 do
    begin
      
if VarToStr(Lv_ExcelWkSheet.Cells[Lv_i,Lv_j])='' then
        Lv_ExcelWkSheet.Cells[Lv_i,Lv_j] := '0';
      Lv_Sum := Lv_Sum + StrToFloat(Lv_ExcelWkSheet.Cells[Lv_i,Lv_j]);
    
end;
    Lv_ExcelWkSheet.Cells[StrGrid1.RowCount 
+ 3,Lv_j] := FloatToStr(Lv_Sum);
    Lv_ExcelWkSheet.Cells[StrGrid1.RowCount 
+ 3,Lv_j].Interior.ColorIndex := 40;
    Lv_Sum :
= 0;
  
end;

  
//==========================熱軋==============================================
  Lv_RowStart :
= StrGrid1.RowCount + 3;
  
for Lv_i := 1 to StrGrid2.RowCount -1 do
  begin
    Lv_ExcelWkSheet.Cells[Lv_i 
+ Lv_RowStart ,1] := '''' + StrGrid2.Cells[1,Lv_i];
  end;

  
for Lv_i := 1 to StrGrid4.ColCount - 2 do  //比較次數
  begin
    
for Lv_j := 0 to Lv_Cnt do
    begin
      
if VarToStr(StrGrid4.Cells[Lv_i + 1,0]) = VarToStr(Lv_ExcelWkSheet.Cells[2,Lv_j * 2 + 2]) then
      begin
        
for Lv_z := 1 to StrGrid2.RowCount -1 do
        begin
          Lv_ExcelWkSheet.Cells[Lv_z 
+ Lv_RowStart,Lv_j * 2 + 2] := StrGrid2.Cells[Lv_i * 2,Lv_z];
          Lv_ExcelWkSheet.Cells[Lv_z 
+ Lv_RowStart,Lv_j * 2 + 3] := StrGrid2.Cells[Lv_i * 2 + 1,Lv_z];
        
end;
      
end;
    
end;
  
end;

  Lv_ExcelWkSheet.Cells[Lv_RowStart 
+ StrGrid2.RowCount,1] := '熱軋總計';
  Lv_ExcelWkSheet.Cells[Lv_RowStart + StrGrid2.RowCount,1].Interior.ColorIndex := 40;

  Lv_Sum :
= 0;
  
for Lv_j := 2 to (Lv_Cnt + 1* 2 + 1 do
  begin
    
for Lv_i := 1 to StrGrid2.RowCount - 1 do
    begin
      
if VarToStr(Lv_ExcelWkSheet.Cells[Lv_i + Lv_RowStart ,Lv_j])='' then
        Lv_ExcelWkSheet.Cells[Lv_i + Lv_RowStart,Lv_j] := '0';
      Lv_Sum := Lv_Sum + StrToFloat(Lv_ExcelWkSheet.Cells[Lv_i + Lv_RowStart,Lv_j]);
    
end;
    Lv_ExcelWkSheet.Cells[Lv_RowStart 
+ StrGrid2.RowCount,Lv_j] := FloatToStr(Lv_Sum);
    Lv_ExcelWkSheet.Cells[Lv_RowStart 
+ StrGrid2.RowCount,Lv_j].Interior.ColorIndex := 40;
    Lv_Sum :
= 0;
  
end;

  
//============================================================================
  Lv_ExcelWkSheet.Cells[Lv_RowStart 
+ StrGrid2.RowCount + 1,1] := '合計';
  Lv_ExcelWkSheet.Cells[Lv_RowStart + StrGrid2.RowCount + 1,1].Interior.ColorIndex := 6;
  
for Lv_j := 2 to (Lv_Cnt + 1* 2 + 1 do
  begin
    Lv_ExcelWkSheet.Cells[Lv_RowStart 
+ StrGrid2.RowCount + 1,Lv_j] := StrToFloat(VarToStr(Lv_ExcelWkSheet.Cells[Lv_RowStart + StrGrid2.RowCount,Lv_j])) + StrToFloat(VarToStr(Lv_ExcelWkSheet.Cells[StrGrid1.RowCount + 3,Lv_j]));
    Lv_ExcelWkSheet.Cells[Lv_RowStart 
+ StrGrid2.RowCount + 1,Lv_j].Interior.ColorIndex := 6;
  
end;
  Lv_ExcelWkSheet.Cells[
1,Lv_Cnt + 1] := '確認訂單出貨(單位:KG)';

  Lv_ExcelWkSheet.Range[
'A1:'+IntColToCharCol(Lv_Cnt*2+3)+'1'].HorizontalAlignment := xlCenter;
  Lv_ExcelWkSheet.Range['A1:'+IntColToCharCol(Lv_Cnt*2+3)+'1'].Interior.ColorIndex := 34;
  Lv_ExcelWkSheet.Range['A1:'+IntColToCharCol(Lv_Cnt*2+3)+'2'].HorizontalAlignment := xlCenter;
  Lv_ExcelWkSheet.Range['A2:'+IntColToCharCol(Lv_Cnt*2+3)+'2'].Interior.ColorIndex := 6;
  Lv_ExcelWkSheet.Range['A3:'+IntColToCharCol(Lv_Cnt*2+3)+'3'].Interior.ColorIndex := 40;
  Lv_ExcelWkSheet.Range['A1:'+IntColToCharCol(Lv_Cnt*2+3)+'1'].Merge;
  Lv_ExcelWkSheet.Range['A1:'+IntColToCharCol(Lv_Cnt*2+3)+IntToStr(Lv_RowStart + StrGrid2.RowCount + 1)].Borders[3].Weight := 2;   //up
  Lv_ExcelWkSheet.Range['A1:'+IntColToCharCol(Lv_Cnt*2+3)+IntToStr(Lv_RowStart + StrGrid2.RowCount + 1)].Borders[4].Weight := 2;   //down
  Lv_ExcelWkSheet.Range['A1:'+IntColToCharCol(Lv_Cnt*2+3)+IntToStr(Lv_RowStart + StrGrid2.RowCount + 1)].Borders[1].Weight := 2;   //left
  Lv_ExcelWkSheet.Range['A1:'+IntColToCharCol(Lv_Cnt*2+3)+IntToStr(Lv_RowStart + StrGrid2.RowCount + 1)].Borders[2].Weight := 2;   //right
  Lv_ExcelApp.Visible := True;
end;
 

a和&a的区别、二维数组的本质及多维数组

1 a和&a的区别 int a[10] = {1,2}; //其他初始化为0   a代表数组首元素的地址,不是整个数组的地址 &a表示整个数组的地址 &a,a代表的数据类型不一样 &a数组类型 in...
  • u010418035
  • u010418035
  • 2015年04月11日 19:23
  • 1423

C++把txt文件读到二维数组

有一部分参考了这篇文章:http://lzh0859.blog.sohu.com/43892352.html,就是判断文件结束有问题查阅教材进行了调整,感谢两个函数,一个已知文件的行和列,一个位置,看...
  • u013527937
  • u013527937
  • 2016年12月19日 12:32
  • 1638

Jedis存储Java对象 - (Java序列化为byte数组方式)

在Jedis开发中,我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来。Redis的key和value都支持二进制安全的字符串,存储Java对象不是问题,下面我们看一下如何来实现。...
  • owen5630
  • owen5630
  • 2015年01月27日 14:51
  • 1572

DataTable/二维数组导出Excel,并对数据分页

  • 2011年04月15日 10:26
  • 12KB
  • 下载

java jxl读取excel中的数据传入二维数组中

利用java jxl读取excel数据传入二维数组中package practice_1;
  • sinat_22797429
  • sinat_22797429
  • 2016年10月23日 09:53
  • 1235

无题(四):分割字符串(运用二维数组)

有一个字符串符合以下特征(”abcdef, acccd, eeee, aaaa, e3eeeee, sssss, ";),要求写一个函数(接口),输出以下结果 1) 以逗号分割字符串,形成二维数组,并...
  • my_sky2012
  • my_sky2012
  • 2015年10月05日 19:21
  • 161

二维数组的运用

题目    1、定义一个4行3列的整型数组,输入12个数,输出该数组    2、输出其中的最大值和最小值    3、输出其中最大值和最小值的下标 //求最大最小值并输出其下标 #in...
  • bruce_suxin
  • bruce_suxin
  • 2016年11月14日 13:50
  • 130

创建动态二维数组.cpp

  • 2014年05月31日 10:03
  • 877B
  • 下载

二维数组的行列互换(函数调用实现)

  • 2008年12月02日 19:30
  • 522B
  • 下载

C++动态申请二维数组方法与应用

  • 2007年09月05日 15:29
  • 830B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:導入EXCEL、二維數組的運用
举报原因:
原因补充:

(最多只允许输入30个字)