首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

小弟我的winform程序从datagrid导出到excel老是出错,请!

2012-01-14 
我的winform程序从datagrid导出到excel老是出错,请高手指点!在线等!privatestringExportToExcel(stringfil

我的winform程序从datagrid导出到excel老是出错,请高手指点!在线等!
private   string   ExportToExcel(string   filename)
                {
                        System.Threading.Thread   thisThread   =   System.Threading.Thread.CurrentThread;
                        System.Globalization.CultureInfo   originalCulture   =   thisThread.CurrentCulture;
                        object   objOpt   =   System.Reflection.Missing.Value;
                        try
                        {
                                object   obj   =   System.Reflection.Missing.Value;
                                Microsoft.Office.Interop.Excel.Application   app   =   new   Microsoft.Office.Interop.Excel.Application();
                                app.Visible   =   true;
                                Workbooks   workbooks   =   app.Workbooks;
                                _Workbook   workbook   =   workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                                Sheets   sheets   =   workbook.Worksheets;
                                _Worksheet   worksheet   =   (_Worksheet)sheets.get_Item(1);
                                int   ridx   =   1;
                                int   cidx   =   0;
                                for   (int   i   =   0;   i   <   dataGridView1.ColumnCount;   i++)
                                {
                                        worksheet.Cells[0,   i]   =   dataGridView1.Columns[i].HeaderText;
                                }
                                if   (dataGridView1.RowCount   >   0)
                                {
                                        for   (int   j   =   0;   j   <   dataGridView1.RowCount;j++)


                                        {
                                                for   (int   k   =   0;   k   <   dataGridView1.ColumnCount;   k++)
                                                {
                                                        worksheet.Cells[ridx,   cidx]   =   dataGridView1[j,   k].Value.ToString();
                                                        cidx++;
                                                }
                                                ridx++;
                                        }
                                }
                                workbook.SaveAs(filename,obj,obj,obj,obj,obj,XlSaveAsAccessMode.xlExclusive,obj,obj,obj,obj,obj);
                                workbook.Saved   =   true;
        app.UserControl   =   false;
        app.Quit();
                                return   "导出[ "   +   filename   +   "]成功 ";
                        }
                        catch   (Exception   _e)
                        {
                                return   "导出失败,原因:\n "   +   _e.Message;
                        }
                        finally
                        {
                                thisThread.CurrentCulture   =   originalCulture;
                        }
                }

[解决办法]
public static void ExportDataGridViewToExcel(DataGridView dataGridview1)


{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls ";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "导出Excel文件到 ";

//saveFileDialog.ShowDialog();
if (saveFileDialog.ShowDialog()==DialogResult.OK)
{
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding( "gb2312 "));
string str = " ";
try
{

//写标题
for (int i = 0; i < dataGridview1.ColumnCount; i++)
{
if (i > 0)
{
str += "\t ";
}
str += dataGridview1.Columns[i].HeaderText;
}

sw.WriteLine(str);
//写内容
for (int j = 0; j < dataGridview1.Rows.Count - 1; j++)
{
string tempStr = " ";
for (int k = 0; k < dataGridview1.Columns.Count; k++)
{
if (k > 0)
{
tempStr += "\t ";
}
tempStr += dataGridview1.Rows[j].Cells[k].Value.ToString();
}
sw.WriteLine(tempStr);
}
sw.Close();
myStream.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
MessageBox.Show( "ok ");
}
}
}
[解决办法]
if (MessageBox.Show( "你確認要導出數據到EXCEL嗎! ", "提示 ", System.Windows.Forms.MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)
{
this.saveFileDialog1.AddExtension = true;
this.saveFileDialog1.DefaultExt = "xls ";
saveFileDialog1.Filter = "*.xls|xls ";
this.saveFileDialog1.ShowDialog();
FileName = this.saveFileDialog1.FileName;
if (FileName == " ")
{
return;
}
}

String cmd = "SELECT a.user_id , a.user_ename, a.user_cname, a.update_user, a.update_time FROM wms_user a ";
CDBmySQL dbALM = new CDBmySQL(clsGol.DBDataBase, clsGol.DBServerName, clsGol.DBUserName, clsGol.DBUserPassWord);
DataTable dt = dbALM.GetDataTable( "wms_user ", cmd);
//System.Data.DataTable dt = new System.Data.DataTable();

long totalCount = dt.Rows.Count;
long rowRead = 0;
float percent = 0;
Excel.Application xlApp = null;
xlApp = new Excel.Application();


Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
Excel.Range range;
worksheet.Cells[1,1] = "員工編號 ";
worksheet.Cells[1, 2] = "英文名稱 ";
worksheet.Cells[1, 3] = "中文名稱 ";
worksheet.Cells[1, 4] = "修改者 ";
worksheet.Cells[1, 5] = "修改時間 ";
range = (Excel.Range)worksheet.Cells[1, 5];
for (int r = 0; r < dt.Rows.Count; r++)
{
worksheet.Cells[r + 2, 1] = r + 1;
for (int i = 0; i < dt.Columns.Count; i++)
{
//worksheet.Cells[r+2,i+1]=dt.Rows[r][i];
if (i + 1 != dt.Columns.Count+1)
worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i];
}
rowRead++;
percent = ((float)(100 * rowRead)) / totalCount;
System.Windows.Forms.Application.DoEvents();
}
range = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[dt.Rows.Count + 2, dt.Columns.Count]);
workbook.Saved = true;
workbook.SaveCopyAs(FileName);

[解决办法]
更改控制面板中本地区域设置为英语(美国)看看,或者
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo( "en-US "); // 0x0409
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;

完成后设置为zh-CN,要么去掉!

热点排行