需要將DataGridView匯入excel,代碼如下:
public static void DataGridViewToExcel(DataGridView dgv)
{
#region 驗證可操作性
//申明保存對話框
SaveFileDialog dlg = new SaveFileDialog();
//默然檔案后綴
dlg.DefaultExt = "xlsx ";
//檔案后綴串列
dlg.Filter = "EXCEL檔案(*.XLSX)|*.xlsx ";
//默然路徑是系統當前路徑
dlg.InitialDirectory = Directory.GetCurrentDirectory();
//打開保存對話框
if (dlg.ShowDialog() == DialogResult.Cancel) return;
//回傳檔案路徑
string fileNameString = dlg.FileName;
//驗證strFileName是否為慷訓值無效
if (fileNameString.Trim() == " ")
{ return; }
//定義表格內資料的行數和列數
int rowscount = dgv.Rows.Count;
int colscount = dgv.Columns.Count;
//行數必須大于0
if (rowscount <= 0)
{
MessageBox.Show("沒有資料可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//列數必須大于0
if (colscount <= 0)
{
MessageBox.Show("沒有資料可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//行數不可以大于65536
if (rowscount > 65536)
{
MessageBox.Show("資料記錄數太多(最多不能超過65536條),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//列數不可以大于255
if (colscount > 255)
{
MessageBox.Show("資料記錄行數太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//驗證以fileNameString命名的檔案是否存在,如果存在洗掉它
FileInfo file = new FileInfo(fileNameString);
if (file.Exists)
{
try
{
file.Delete();
}
catch (Exception error)
{
MessageBox.Show(error.Message, "洗掉失敗 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
#endregion
Microsoft.Office.Interop.Excel.Application objExcel = null;
Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
Microsoft.Office.Interop.Excel.Worksheet objsheet = null;
try
{
//申明物件
objExcel = new Microsoft.Office.Interop.Excel.Application();
objWorkbook = objExcel.Workbooks.Add(System.Reflection.Missing.Value);
//objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;
objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.Worksheets[1];
//設定EXCEL不可見
objExcel.Visible = false;
//向Excel中寫入表格的表頭
int displayColumnsCount = 1;
for (int i = 0; i <= dgv.ColumnCount - 1; i++)
{
if (dgv.Columns[i].Visible == true)
{
objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
displayColumnsCount++;
}
}
//設定進度條
//tempProgressBar.Refresh();
//tempProgressBar.Visible = true;
//tempProgressBar.Minimum=1;
//tempProgressBar.Maximum=dgv.RowCount;
//tempProgressBar.Step=1;
//向Excel中逐行逐列寫入表格中的資料
for (int row = 0; row <= dgv.RowCount - 1; row++)
{
//tempProgressBar.PerformStep();
displayColumnsCount = 1;
for (int col = 0; col < colscount; col++)
{
if (dgv.Columns[col].Visible == true)
{
try
{
objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
displayColumnsCount++;
}
catch (Exception)
{
}
}
}
}
//--------------調整列寬-------------------//
objsheet..Columns[1].ColumnWidth = 15;//------------------(此處報錯)
//-------------------------------------------//
//隱藏進度條
//tempProgressBar.Visible = false;
//保存檔案
objWorkbook.SaveAs(fileNameString, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value);
}
catch (Exception error)
{
MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
finally
{
//關閉Excel應用
if (objWorkbook != null) objWorkbook.Close(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
if (objExcel != null) objExcel.Quit();
objsheet = null;
objWorkbook = null;
objExcel = null;
}
MessageBox.Show(fileNameString + "匯出完畢! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
我在論壇上看到調整excel的代碼是:
worksheet.Columns[1].ColumnWidth = 15;
然后結合自己實際,我就改成:
objsheet.Columns[1].ColumnWidth = 15;
系統報錯為:
錯誤 1 “this”方法沒有采用“1”個引數的多載
請問我應該如何修改才能實作調整excel列寬的功能?
uj5u.com熱心網友回復:
你看到的代碼是針對 Microsoft.Office.Interop.Excel 的例子嗎?uj5u.com熱心網友回復:
我不清楚啊。如果按照我的這個代碼來寫,應該如何設定列寬?uj5u.com熱心網友回復:
你粘上來的代碼 objsheet..Columns[1].ColumnWidth = 15; 這兒你寫了倆點,就當你是手滑了。你的代碼沒有問題,最好把你報錯的截圖發上來看一下。如果自動調整列寬可以解決你的問題,也可以用 objsheet.Columns.Autofit();
uj5u.com熱心網友回復:
系統報錯為:錯誤 1 “this”方法沒有采用“1”個引數的多載
uj5u.com熱心網友回復:
麻煩指導一下。uj5u.com熱心網友回復:
用asepose.xlsx試一下唄uj5u.com熱心網友回復:
沒看懂你的意思啊,哥。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/21166.html
標籤:C#
