王大龍 張慧娟
摘要 本文設(shè)計(jì)并實(shí)現(xiàn)了以C#軟件為平臺,采用Excel-VBA編程技術(shù)進(jìn)行批量數(shù)據(jù)的表格輸出。
【關(guān)鍵詞】飛航試驗(yàn) 跟蹤測量數(shù)據(jù) Excel軟件
當(dāng)前飛航試驗(yàn)數(shù)據(jù)處理軟件主要采用C#語言編寫。C#語言提供了一種編寫Windows平臺上幾乎任何類型的軟件或組件的方式,對編寫程序的方式進(jìn)行了革新,更易于實(shí)現(xiàn)在Windows上編程。采用C#語言進(jìn)行軟件開發(fā),軟件的通用和后期維護(hù)具有無可比擬的巨大優(yōu)勢。Excel是微軟公司開發(fā)的Office辦公系列軟件中專用于表格數(shù)據(jù)處理的,對于統(tǒng)計(jì)數(shù)據(jù)的處理非常高效,以其強(qiáng)大的功能和友好的用戶界面而受到廣泛的應(yīng)用。通過c#軟件實(shí)現(xiàn)基于Excel-VBA編程技術(shù)的數(shù)據(jù)表格的高效輸出,一方面能充分利用Excel軟件強(qiáng)大的數(shù)據(jù)處理能力,對龐大的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、分析和比對,在保證數(shù)據(jù)高效處理的前提下,根據(jù)處理要求實(shí)現(xiàn)數(shù)據(jù)的初步分析統(tǒng)計(jì)。另一方面直觀的表格輸出,也有助于操作人員進(jìn)行信息和數(shù)據(jù)管理,直接提高了數(shù)據(jù)處理效率。因此有必要討論有效可行的方法來實(shí)現(xiàn)C#軟件基于Excel-VBA編程技術(shù)的數(shù)據(jù)表格輸出。
1 飛航試驗(yàn)測量設(shè)備跟蹤數(shù)據(jù)
飛航試驗(yàn)航程不斷增加,各類型測量設(shè)備記錄了大量的跟蹤測量數(shù)據(jù)。在事后數(shù)據(jù)處理開始之前,有必要對測量數(shù)據(jù)進(jìn)行初步的分析統(tǒng)計(jì),把握數(shù)據(jù)狀態(tài),為后續(xù)數(shù)據(jù)處理方案的制定提供可靠依據(jù)。飛航試驗(yàn)測量設(shè)備種類繁多,不同跟蹤設(shè)備具有不同的工作原理與特性,記錄的數(shù)據(jù)類型也不盡相同。光學(xué)經(jīng)緯儀具有高精度的測角測元,但缺少測距信息,無法實(shí)現(xiàn)單站目標(biāo)定位,同一時刻需要2臺或以上的設(shè)備才能完成對飛航目標(biāo)的定位。連續(xù)波雷達(dá)能實(shí)現(xiàn)對目標(biāo)測距測速的高精度測量,但也需要多臺設(shè)備才能保證對目標(biāo)的精確定位。后續(xù)的目標(biāo)定位數(shù)據(jù)融合,數(shù)據(jù)處理人員必須要從龐大的數(shù)據(jù)中提取相關(guān)信息,才能制定正確合理的數(shù)據(jù)處理方案,減少后續(xù)處理的反復(fù)過程,提高處理效率。將數(shù)據(jù)以Excel文檔的形式來存儲有利于數(shù)據(jù)的共享和傳輸,數(shù)據(jù)信息的交流更加便利,Excel軟件提供了大量的數(shù)據(jù)統(tǒng)計(jì)與分析功能,通過直觀統(tǒng)計(jì)表格將信息呈現(xiàn)在數(shù)據(jù)處理人員面前,能更好的滿足處理需求。
2 數(shù)據(jù)文件導(dǎo)入的原則與方法
Excel是辦公中常用的電子表格處理工具,在信息系統(tǒng)中被廣泛使用。在測量數(shù)據(jù)處理這一類型的信息分析系統(tǒng)中,報(bào)表十分重要。比如系統(tǒng)誤差修正、目標(biāo)定位結(jié)果、精度分析等都采用報(bào)表形式。Excel文件具有工作表(Worksheet)、行(Row)、列(Column)、單元格(Cell)的結(jié)構(gòu),文件有多個工作表,這種結(jié)構(gòu)很容易建立與復(fù)雜結(jié)構(gòu)數(shù)據(jù)的對應(yīng)關(guān)系。Excel文件可被認(rèn)為是一個數(shù)據(jù)庫,但不具備像SQL服務(wù)器查詢或存儲的小型數(shù)據(jù)庫的功能。采用Microsoft的數(shù)據(jù)庫引擎連接Excel文件,即可像SQL服務(wù)器數(shù)據(jù)庫引擎一樣對數(shù)據(jù)更新和查詢。
導(dǎo)入原則。一是一次導(dǎo)入同一類型的數(shù)據(jù),應(yīng)將不同類型的數(shù)據(jù)導(dǎo)入到類別中,如測元數(shù)據(jù)方位角、俯仰角數(shù)據(jù)放置在各自類別中。二是數(shù)據(jù)源應(yīng)與目標(biāo)一致。導(dǎo)入方法和步驟:找到對應(yīng)的源文件;檢索數(shù)據(jù)源文件的列表;準(zhǔn)備目標(biāo)數(shù)據(jù)基礎(chǔ);生成導(dǎo)入新記錄。
3 實(shí)現(xiàn)
本實(shí)驗(yàn)將從SQL服務(wù)器數(shù)據(jù)庫中,根據(jù)需要將數(shù)據(jù)選擇性地讀取一些必需的字段,寫入Excel數(shù)據(jù)文件實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入過程。
編程如下:
private void buttonDataIn_Click(objectsender,EvenrArgs e) //buttonDataln點(diǎn)擊操作
stringconnSqlString=………………………;//數(shù)據(jù)檢索字符串
//利用FileDialog控件選擇文件
System.Windows.FormsOpenFileDialogfileinformation=newOpenFileDialog()
if (fileinformation.ShowDialog()==DialogResult.OK)
Trans ferData(fileinfo rmation.FileName,”TableSheet”,connSqlString);//TableSheer表名
/TransferData函數(shù)完成數(shù)據(jù)導(dǎo)入
public void TransferData(stringexcelFileName, string shtName, stringconnecrionString)
DataSetdatasfSheet= new DaraSet()∥定義新數(shù)據(jù)集
try
stringstrConnection=”Provider=MicrosoftJet.OLEDB.4.0;"&
”Data Source=”&excelFileName&”:”&”Extended Properties=Excel 8.0;”
OleDbConnection conn - newOleDbConnection(strC,onnection)
strConnection.Open()
string strSqIExcel=“”//strSqlExcel字符串賦為空
OleDbDataAdaptermyReq= null
strSqIExcel= string.Format(”select * from[{0)$]” sb cName)//查詢語句
myReq= new OleDbDataAdapter(strExcel,strConnection)
myReq.Fill(darasfSheet, shtName)
string strSqlCreat= string.Format("ifobject_id({O)) is null create table{0)(”,shtName)
foreach (System.Data.DataColumn c indatas fSheet.Tables [O].Columns)
strSqlCreat+=string.Format("[{O}]varchar(255),”,c.ColumnName)
srrSqlCreat= strSql.Trim(',)+”)”//目標(biāo)表不存在則創(chuàng)建表
using (System.Data.SqlC,lientSqlConnectionsqlconnection=
New System.Data.SqIClient.SqIConnection(connectionString》
sqlconnection.Open()
System.Dara.S qlClient.S qlC ommandcommand= sqlconnection.CreateCommand()
command.CommandText= strSqlCreat
command.ExecuteNonQuery()
sqlconnection.Close()
//導(dǎo)入數(shù)據(jù)
using (System.Data.SqlC,lientSqlBulkCopyScopy=
New System.Data.SqIClientSqlBulkCopy(connectionString》
Scopy.SqlRowsC,opied+=
New System.Data.SqlClientS qlRowsC opiedEventHandler( ScopySqlRowsCopied)
Scopy.BatchSize= 800;//每次傳輸?shù)男袛?shù)
Scopy.NotifyAfter= 800;//進(jìn)度提示的行數(shù)
Scopy.DestinationTableName二shtName;//目標(biāo)表
Scopy.WriteToServer(ds.Tables[0])
catch (Exception ex)∥錯誤信息
System.Windows.Forms.MessageBox.Show(ex.Message)
通過編程實(shí)現(xiàn)了數(shù)據(jù)的快速輸出。
4 結(jié)論
基于C#軟件采用Excel-VBA編程技術(shù)實(shí)現(xiàn)數(shù)據(jù)的表格輸出,能夠幫助數(shù)據(jù)處理人員從大量的數(shù)據(jù)當(dāng)中精確高效的獲得期望的數(shù)據(jù)信息,Excel強(qiáng)大的數(shù)據(jù)分析與直觀豐富的報(bào)表功能為操作人員提供了多樣的展示方式,可以根據(jù)需求,遵循VBA環(huán)境下的實(shí)驗(yàn)原理和方法,預(yù)先編制顯示模板,以滿足不同的需求,可廣泛應(yīng)用在數(shù)據(jù)管理、分析與處理領(lǐng)域。
參考文獻(xiàn)
[1]蘇慶,李忠良,吳偉民.在C#. NET下實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入Excel的方法研究[J].計(jì)算機(jī)與現(xiàn)代化,2011(04): 29-31.
[2]周虎.基于C#的Excel數(shù)據(jù)批量導(dǎo)入SqlServer的方法研究與實(shí)現(xiàn)[J].軟件工程師,2014 (17): 54-56.