No04.SAP S/4 HANA Cloud成本要素数据的获取(四)把数据抽取到SQL Server中

在这里插入图片描述
备份的数据不知道如何判断时间段,让我们的管理员把表中的数据全部下载了下来,每一个都要有10M大小,没办法处理了,又陷入了僵局。这么多的xml文件如何处理,用Excel表打开一看,可以看到表的字段,另存为excel表,同时把表中的字段项删除后,文件内容变成了标准的数据表格式。同时文件大小也变成了1.4M,每个数据表中的记录为3000条,在CKIS数据表中大约有记录3000000条,利用熟悉的excel表处理是不太现实了。最终制定了如下的处理流程:
在这里插入图片描述
前面的利用Excel表中的VBA实现,这样可以把文件执行速度比较快。
在这里插入图片描述

VBA数据整理代码,把xml另存为xlsx

下面展示一些 内联代码片

 Application.ScreenUpdating = True
        objFileName = Range("B" & iRow).Value
        Range("C" & iRow).Value = Left(objFileName, Len(objFileName) - 4) & ".xlsx"
        Range("D" & iRow).Value = "正在转换"
        
        DoEvents
     Application.ScreenUpdating = False
     
        If UCase(Right(objFileName, Len(XML))) = UCase(XML) Then
            NewFileName = convFolder & Range("C" & iRow).Value
            Set ConvertThis = Workbooks.OpenXML(Filename:=xmlFolder & "\" & objFileName, LoadOption:=xlXmlLoadImportToList)
            ConvertThis.SaveAs Filename:=NewFileName, FileFormat:=xlOpenXMLWorkbook
            ConvertThis.Close
        End If
        
        Application.ScreenUpdating = True
        Range("D" & iRow).Value = "转换成功"
        Range("E" & iRow).Value = "共耗时" & Format(Timer - t, "00.00") & "秒"
        Application.ScreenUpdating = False

VBA数据整理代码,删除xlsx中没用的数据列

下面展示一些 内联代码片

  NewFileName = convFolder & Range("C" & iRow).Value
            Set convertthis = Workbooks.OpenXML(Filename:=xmlFolder & "\" & objFileName, LoadOption:=xlXmlLoadImportToList)
            For Each sht In convertthis.Sheets
                 Select Case FileTitle
                 Case "CKMLPRKEPH"
                    sht.Columns("A:J").Delete Shift:=xlToLeft
                    sht.Rows("2:133").Delete Shift:=xlUpt
                Case "CKMLPRKEKO"
                    sht.Columns("A:J").Delete Shift:=xlToLeft
                    sht.Rows("2:13").Delete Shift:=xlUpt
                End Select
            Next
            convertthis.Save
            convertthis.Close

C#把目录下的xlsx导入到SQL Server中

在这里插入图片描述

在SQL Server2012中建立和导出数据格式一致的数据表,运行程序其中读取Excel数据使用的是ADO方式,复制到SQL Server的数据传送代码为SqlBulkCopy模式。

string connectionString = @"Data Source=localhost;Initial Catalog=SRCost;Integrated Security=True";
            OleDbConnection ole = null;
            OleDbDataAdapter da = null;
            DataTable dt = null;
            string strTable = textBox1.Text.Trim();

            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;"
                            + "Data Source=" + strFilePath.Trim() + ";"
                            + "Extended Properties=Excel 12.0";
            //string sTableName = combox1.Text.Trim();
            string strExcel = "select * from ["+ strTable +"$]";
            try
            {
                ole = new OleDbConnection(strConn);
                ole.Open();
                da = new OleDbDataAdapter(strExcel, ole);
                dt = new DataTable();
                da.Fill(dt);
                using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
                {
                    //bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);  
                    //bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
                    bcp.BatchSize = 1000;//每次传输的行数  
                    // bcp.NotifyAfter = 1000;//进度提示的行数  
                    bcp.DestinationTableName = this.txtTableName.Text.Trim();//目标表
                    bcp.WriteToServer(dt);
                    //MessageBox.Show("导入完成!");
                    richTextBox1.Text = richTextBox1.Text+strFilePath.Trim() + "完成!        ";
                    label3.Text = strFilePath.Trim() + "导入完成!\n"; 
                }
                //为datagridview设置数据源
               // this.xlsExpData.DataSource = dt;


                //设置每一列显示数据模式为AllCells
                //for (int i = 0; i < dt.Columns.Count; i++)
                //{
                //   xlsExpData.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                //}
                ole.Close();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }
            finally
            {
                if (ole != null)
                    ole.Close();
            } 

在SQL Server还原数据表中之间的关系,把数据在最终的视图中展现。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艺多不养身

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值