Excelhelper

//システムを使用しました。
// System.Collections.Genericを使用しました。
// System.Textのを使用しました。

//名前空間OA_LZZ0902.DAL
// {
//クラスExcel123456
// {
//}
//}

 

システムを使用しました。

System.Collectionsを使用しました。

System.Textのを使用しました。

System.Dataを使用しました。

System.Threadingを使用しました。

System.Windows.Formsを使用しました。

System.Collections.Genericを使用しました。

Microsoft.Office.Coreを使用しました。

エクセル= Microsoft.Office.Interop.Excelを使用して、

 

パブリッククラスExportToExcel

{

公共まずExcel.Application m_xlApp = NULL;

 

公共ボイドOutputAsExcelFile(のDataGridView DataGridViewの)

{

IF(dataGridView.Rows.Count <= 0)

{

MessageBox.Show( "无数据!"、 "提示"、MessageBoxButtons.OK、MessageBoxIcon.Warning)。返します。

}

文字列filePathに= "";

SaveFileDialog S =新SaveFileDialog();

s.Title =「Excelファイルを保存します」。

s.Filter = "Excelファイル(* .XLS)| * .XLS"。

s.FilterIndex = 1。

もし(s.ShowDialog()== DialogResult.OK)

filePathに= s.FileName。

返します。

 

//最初のステップ:dataTableのにDataGridViewの、あなたは隠された列のDataGridViewをフィルタリングすることができますので、

 

DataTableのtmpDataTable =新しいDataTableの( "tmpDataTable");

DataTableのmodelTable =新しいDataTableの( "ModelTable");

用(INTカラム= 0;カラム<dataGridView.Columns.Count;カラム++)

{

IF(dataGridView.Columns [列] .Visible == TRUE)

{

DataColumn tempColumn =新規のDataColumn(dataGridView.Columns [列] .HeaderText、typeof演算(列))。

tmpDataTable.Columns.Add(tempColumn)。

DataColumn modelColumn =新規のDataColumn(dataGridView.Columns [列] .nameの、typeof演算(列))。

modelTable.Columns.Add(modelColumn)。

}

}

用(INT列= 0、行<dataGridView.Rows.Count、行++)

{

(dataGridView.Rows [行] .Visible ==偽)なら

持続する;

DataRow tempRow = tmpDataTable.NewRow()。

以下のために(int型私= 0;私はtmpDataTable.Columns.Countを<;私は++)

tempRow [I] = dataGridView.Rows [行] .Cells [modelTable.Columns [I] .ColumnName] .Valueの。

tmpDataTable.Rows.Add(tempRow)。

}

もし(tmpDataTable == nullの)

{

返します。

}

 

//ステップ2:dataTableのExcelにエクスポート

ロングたrowNum = tmpDataTable.Rows.Count; //行数

int型columnNum = tmpDataTable.Columns.Count; //列数

まず、Excel.Application m_xlApp =新しいまずExcel.Application();

m_xlApp.DisplayAlerts = falseは、変更を表示しません//プロンプト

m_xlApp.Visible = falseは、

 

Excel.Workbooksワークブック= m_xlApp.Workbooks。

Excel.Workbookブック= workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet)。

Excel.Worksheetワークシート=(Excel.Worksheet)workbook.Worksheets [1]; //取得シート1

 

試します

{

文字列[、] DATAS =新しい文字列[たrowNum + 1、columnNum]。

//書き込みフィールド(;;私はcolumnNumを<I ++が、私は0 = INT)について

DATAS [0、I] = tmpDataTable.Columns [I] .Caption。

//Excel.Range範囲= worksheet.get_Range(worksheet.Cells [1,1]、worksheet.Cells [1、columnNum])。

Excel.Range範囲= m_xlApp.Range [worksheet.Cells [1,1]、worksheet.Cells [1、columnNum]。

range.Interior.ColorIndex = 15;灰色の// 15代表

range.Font.Bold =はtrue。

range.Font.Size = 10。

 

INT R = 0。

以下のための(R = 0; R <たrowNum; R ++)

{

以下のために(int型私= 0;私はcolumnNumを<;私は++)

{

オブジェクトOBJ = tmpDataTable.Rows [R] [tmpDataTable.Columns [I] .ToString()]。

DATAS [R + 1、i]は= OBJ == NULL "": "「" + obj.ToString()(TRIM); //単一引用符の前にobj.toString()には、自動フォーマット変換を防止することです?。

}

System.Windows.Forms.Application.DoEvents();

//プログレスバーを追加

}

//Excel.Range fchR = worksheet.get_Range(worksheet.Cells [1,1]、worksheet.Cells [たrowNum + 1、columnNum])。

Excel.Range fchR = m_xlApp.Range [worksheet.Cells [1,1]、worksheet.Cells [たrowNum + 1、columnNum]。

fchR.Value2 =日付。

 

worksheet.Columns.EntireColumn.AutoFit(); //適応列幅。

//worksheet.Name = "DD"。

 

//m_xlApp.WindowState = Excel.XlWindowState.xlMaximized。

m_xlApp.Visible = falseは、

 

// = worksheet.get_Range(worksheet.Cells [1,1]、worksheet.Cells [たrowNum + 1、columnNum])。

範囲= m_xlApp.Range [worksheet.Cells [1,1]、worksheet.Cells [たrowNum + 1、columnNum]。

 

//range.Interior.ColorIndex = 15; // 15の代表グレー

range.Font.Size = 9。

range.RowHeight = 14.25;

range.Borders.LineStyle = 1。

range.Horizo​​ntalAlignment = 1。

=真workbook.Saved。

workbook.SaveCopyAs(filePathに)。

}

キャッチ(例外の例)

{

MessageBox.Show( "エクスポート例外:" + ex.Message、 "異常エクスポート"、MessageBoxButtons.OK、MessageBoxIcon.Warning)。

}

最後に

{

ポートを変更します();

}

 

m_xlApp.Workbooks.Close();

m_xlApp.Workbooks.Application.Quit();

m_xlApp.Application.Quit();

m_xlApp.Quit();

MessageBox.Show( "輸出成功!"、 "プロンプト"、MessageBoxButtons.OK、MessageBoxIcon.Information)。

}

プライベートボイドEndReport()

{

不足しているオブジェクト= System.Reflection.Missing.Value。

試します

{

//m_xlApp.Workbooks.Close()。

//m_xlApp.Workbooks.Application.Quit()。

//m_xlApp.Application.Quit()。

//m_xlApp.Quit()。

}

キャッチ{}

最後に

{

試します

{

System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Workbooks)。

System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Application)。

System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp)。

m_xlApp = NULL;

}

キャッチ{}

試します

{

//ごみプロセス

this.killProcessThread();

}

キャッチ{}

GC.Collect();

}

}

 

プライベート無効killProcessThread()

{

ArrayListのmyProcess =新しいArrayListを();

以下のために(int型私= 0;私<myProcess.Count、私は++)

{

試します

{

System.Diagnostics.Process.GetProcessById(int.Parse((文字列)myProcess [I]))キル()。

}

キャッチ{}

}

}

}

おすすめ

転載: www.cnblogs.com/LiZhongZhongY/p/11468386.html