//システムを使用しました。
// 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.HorizontalAlignment = 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]))キル()。
}
キャッチ{}
}
}
}