我做了个软件,在本机上运行良好,但在某些机器上运行会出现一些错误.因为出错电脑不在身边,所以无法查看错误信息,但在本机环境中运行良好,我想代码部分应该没什么问题现在我想请教各位大大一般是什么情况会产生无法创建xml、excel文件的情况,应该怎样解决这类问题?产生错误的部分是:1)把datagridview中的数据导入xml中代码部分: private void btnWriteXml_Click(object sender, EventArgs e)
{
WriteXml(dsWorkReportTrans, workName, workDate.ToShortDateString());//dsWorkReportTrans为datagridview中绑定的dataset, workName添表人姓名, workDate添表日期
}
public static void WriteXml(DataSet ds, string workname, string workdate)
{
if (ds.Tables[0].Rows.Count == 0)
{
MessageBox.Show("没有可供导出的数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
SaveFileDialog savefiledialog = new SaveFileDialog();
savefiledialog.Filter = "Xml files (*.Xml)|*.Xml";
savefiledialog.FilterIndex = 0;
savefiledialog.RestoreDirectory = true;
savefiledialog.CreatePrompt = true;
savefiledialog.Title = "导出文件保存路径";
savefiledialog.FileName = workname + "@" + workdate;
//savefiledialog.ShowDialog(); if (savefiledialog.ShowDialog() == DialogResult.OK)
{
string FileName = savefiledialog.FileName;
ds.WriteXml(FileName);
MessageBox.Show("数据已经成功导出到:" + FileName, "导出完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{ }
}
}
2)把datagridview中的数据导入Excel中代码部分:public static void WriteExcel(string caption, string captionSub, string name, string date, DataGridView dgv)//5个参数分别为标题、副标题、填表人、日期、加载的datagridview数据,下面的内容主要是设计报表格式
{
int visiblecolumncount = 0;
for (int i = 0; i < dgv.Columns.Count; i++)
{
if (dgv.Columns[i].Visible == true && (dgv.Columns[i] is DataGridViewTextBoxColumn))
{
visiblecolumncount++;
}
}
try
{
int currentcolumnindex = 1;
Excel.ApplicationClass Mylxls = new Microsoft.Office.Interop.Excel.ApplicationClass();
Mylxls.Application.Workbooks.Add(true);
Mylxls.Cells.Font.Size = 10.5;
Mylxls.Caption = caption;
Mylxls.Cells[1, 1] = caption;
Mylxls.Cells[2, 1] = captionSub;
Mylxls.Cells[4, 1] = "填表人:";
Mylxls.Cells[3, 1] = "填表日期:";
Mylxls.Cells[4, 3] = name;
Mylxls.Cells[3, 3] = date;
for (int i = 0; i < dgv.Columns.Count; i++)
{
if (dgv.Columns[i].Visible == true && (dgv.Columns[i] is DataGridViewTextBoxColumn))
{
Mylxls.Cells[5, currentcolumnindex] = dgv.Columns[i].HeaderText;
Mylxls.get_Range(Mylxls.Cells[5, currentcolumnindex], Mylxls.Cells[5, currentcolumnindex]).Cells.Borders.LineStyle = 1;
Mylxls.get_Range(Mylxls.Cells[5, currentcolumnindex], Mylxls.Cells[5, currentcolumnindex]).ColumnWidth = dgv.Columns[i].Width / 8;
Mylxls.get_Range(Mylxls.Cells[5, currentcolumnindex], Mylxls.Cells[5, currentcolumnindex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
currentcolumnindex++;
}
}
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, visiblecolumncount]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).RowHeight = 30;
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Name = "黑体";
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Size = 14;
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, visiblecolumncount]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, visiblecolumncount]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 1]).RowHeight = 30;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 1]).Font.Name = "黑体";
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 1]).Font.Size = 14;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, visiblecolumncount]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
Mylxls.get_Range(Mylxls.Cells[4, 1], Mylxls.Cells[4, 2]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[4, 1], Mylxls.Cells[4, 2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[4, 3], Mylxls.Cells[4, 4]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[4, 3], Mylxls.Cells[4, 4]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[3, 1], Mylxls.Cells[3, 2]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[3, 1], Mylxls.Cells[3, 2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[3, 3], Mylxls.Cells[3, 4]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[3, 3], Mylxls.Cells[3, 4]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[1, 2], Mylxls.Cells[1, 2]).ColumnWidth = 12;
Mylxls.get_Range(Mylxls.Cells[6, 1], Mylxls.Cells[dgv.Rows.Count + 4, visiblecolumncount]).NumberFormatLocal = "@";
object[,] dataArray = new object[dgv.Rows.Count, visiblecolumncount];
for (int i = 0; i < dgv.Rows.Count; i++)
{
currentcolumnindex = 1;
for (int j = 0; j < dgv.Columns.Count; j++)
{
if (dgv.Columns[j].Visible == true && (dgv.Columns[j] is DataGridViewTextBoxColumn))
{
if (dgv[j, i].Value != null)
{
dataArray[i, currentcolumnindex - 1] = dgv[j, i].Value.ToString();
}
currentcolumnindex++;
}
}
}
Mylxls.get_Range(Mylxls.Cells[6, 1], Mylxls.Cells[dgv.Rows.Count + 4, visiblecolumncount]).Value2 = dataArray;
Mylxls.get_Range(Mylxls.Cells[6, 1], Mylxls.Cells[dgv.Rows.Count + 4, visiblecolumncount]).Cells.Borders.LineStyle = 1;
Mylxls.Visible = true;
}
catch
{
MessageBox.Show("信息导出失败,请确认你的机子上装有Microsoft Office Excel 2003!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{ }
}
{
WriteXml(dsWorkReportTrans, workName, workDate.ToShortDateString());//dsWorkReportTrans为datagridview中绑定的dataset, workName添表人姓名, workDate添表日期
}
public static void WriteXml(DataSet ds, string workname, string workdate)
{
if (ds.Tables[0].Rows.Count == 0)
{
MessageBox.Show("没有可供导出的数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
SaveFileDialog savefiledialog = new SaveFileDialog();
savefiledialog.Filter = "Xml files (*.Xml)|*.Xml";
savefiledialog.FilterIndex = 0;
savefiledialog.RestoreDirectory = true;
savefiledialog.CreatePrompt = true;
savefiledialog.Title = "导出文件保存路径";
savefiledialog.FileName = workname + "@" + workdate;
//savefiledialog.ShowDialog(); if (savefiledialog.ShowDialog() == DialogResult.OK)
{
string FileName = savefiledialog.FileName;
ds.WriteXml(FileName);
MessageBox.Show("数据已经成功导出到:" + FileName, "导出完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{ }
}
}
2)把datagridview中的数据导入Excel中代码部分:public static void WriteExcel(string caption, string captionSub, string name, string date, DataGridView dgv)//5个参数分别为标题、副标题、填表人、日期、加载的datagridview数据,下面的内容主要是设计报表格式
{
int visiblecolumncount = 0;
for (int i = 0; i < dgv.Columns.Count; i++)
{
if (dgv.Columns[i].Visible == true && (dgv.Columns[i] is DataGridViewTextBoxColumn))
{
visiblecolumncount++;
}
}
try
{
int currentcolumnindex = 1;
Excel.ApplicationClass Mylxls = new Microsoft.Office.Interop.Excel.ApplicationClass();
Mylxls.Application.Workbooks.Add(true);
Mylxls.Cells.Font.Size = 10.5;
Mylxls.Caption = caption;
Mylxls.Cells[1, 1] = caption;
Mylxls.Cells[2, 1] = captionSub;
Mylxls.Cells[4, 1] = "填表人:";
Mylxls.Cells[3, 1] = "填表日期:";
Mylxls.Cells[4, 3] = name;
Mylxls.Cells[3, 3] = date;
for (int i = 0; i < dgv.Columns.Count; i++)
{
if (dgv.Columns[i].Visible == true && (dgv.Columns[i] is DataGridViewTextBoxColumn))
{
Mylxls.Cells[5, currentcolumnindex] = dgv.Columns[i].HeaderText;
Mylxls.get_Range(Mylxls.Cells[5, currentcolumnindex], Mylxls.Cells[5, currentcolumnindex]).Cells.Borders.LineStyle = 1;
Mylxls.get_Range(Mylxls.Cells[5, currentcolumnindex], Mylxls.Cells[5, currentcolumnindex]).ColumnWidth = dgv.Columns[i].Width / 8;
Mylxls.get_Range(Mylxls.Cells[5, currentcolumnindex], Mylxls.Cells[5, currentcolumnindex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
currentcolumnindex++;
}
}
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, visiblecolumncount]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).RowHeight = 30;
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Name = "黑体";
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Size = 14;
Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, visiblecolumncount]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, visiblecolumncount]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 1]).RowHeight = 30;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 1]).Font.Name = "黑体";
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 1]).Font.Size = 14;
Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, visiblecolumncount]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
Mylxls.get_Range(Mylxls.Cells[4, 1], Mylxls.Cells[4, 2]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[4, 1], Mylxls.Cells[4, 2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[4, 3], Mylxls.Cells[4, 4]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[4, 3], Mylxls.Cells[4, 4]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[3, 1], Mylxls.Cells[3, 2]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[3, 1], Mylxls.Cells[3, 2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[3, 3], Mylxls.Cells[3, 4]).MergeCells = true;
Mylxls.get_Range(Mylxls.Cells[3, 3], Mylxls.Cells[3, 4]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Mylxls.get_Range(Mylxls.Cells[1, 2], Mylxls.Cells[1, 2]).ColumnWidth = 12;
Mylxls.get_Range(Mylxls.Cells[6, 1], Mylxls.Cells[dgv.Rows.Count + 4, visiblecolumncount]).NumberFormatLocal = "@";
object[,] dataArray = new object[dgv.Rows.Count, visiblecolumncount];
for (int i = 0; i < dgv.Rows.Count; i++)
{
currentcolumnindex = 1;
for (int j = 0; j < dgv.Columns.Count; j++)
{
if (dgv.Columns[j].Visible == true && (dgv.Columns[j] is DataGridViewTextBoxColumn))
{
if (dgv[j, i].Value != null)
{
dataArray[i, currentcolumnindex - 1] = dgv[j, i].Value.ToString();
}
currentcolumnindex++;
}
}
}
Mylxls.get_Range(Mylxls.Cells[6, 1], Mylxls.Cells[dgv.Rows.Count + 4, visiblecolumncount]).Value2 = dataArray;
Mylxls.get_Range(Mylxls.Cells[6, 1], Mylxls.Cells[dgv.Rows.Count + 4, visiblecolumncount]).Cells.Borders.LineStyle = 1;
Mylxls.Visible = true;
}
catch
{
MessageBox.Show("信息导出失败,请确认你的机子上装有Microsoft Office Excel 2003!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{ }
}
2.请确认客户机的用户是否有权限catch
{
MessageBox.Show("信息导出失败,请确认你的机子上装有Microsoft Office Excel 2003!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}你这个check是一点用都没有的,因为如果用户机没有装Office,或是版本不一样,程序在调用这个Class时就会出错的,而不是等到调用你这个Method时出错。
1)我这个try{ }catch{ }已经试过了,是可以提示出错的.所以不太明白你的意思,可不可以贴下代码帮我改下?谢谢
2)确认客户机的用户是否有权限??什么意思??怎么修改??
至于xml和excel的版本,我问过的excel是2003的,不存在问题,另外客户机上由于没有数据库我是使用xml做数据库,他在生成、读取和修改xml文件上都不存在问题,但使用SaveFileDialog保存xml时有问题郁闷~