c#将datawindow(dw)导出到电子表格(excle)

CNCaiNiao 2011-10-05 12:57:16
请教大虾们,如何在c#里将datawindow(dw)导出到电子表格(excle),所见即所得的效果。搞了好久不对路。
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CNCaiNiao 2011-10-08
  • 打赏
  • 举报
回复
datawindow数据窗口,把数据窗口中的数据导出到电子表格
allen0118 2011-10-06
  • 打赏
  • 举报
回复
datawindow ??DataGridView吧?

private void tsExcel_Click(object sender, EventArgs e)
{
if (this.dgv.Rows.Count < 1)
{
MessageBox.Show("没有数据可供导出!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string saveFileName = "";
//bool fileSaved = false;
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = DateTime.Now.ToLocalTime().ToString("yyyyMMddHHmmss");
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
MessageBox.Show("无法创建Excel对象,可能未安装Excel");
return;
}

Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1

//写标题
for (int i = 0; i < dgv.ColumnCount; i++)
{
worksheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
}
//写值
for (int r = 0; r < dgv.Rows.Count; r++)
{
for (int i = 0; i < dgv.ColumnCount; i++)
{
worksheet.Cells[r + 2, i + 1] = dgv.Rows[r].Cells[i].Value;
}
System.Windows.Forms.Application.DoEvents();
}
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
//if (Microsoft.Office.Interop.cmbxType.Text != "Notification")
//{
// Excel.Range rg = worksheet.get_Range(worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]);
// rg.NumberFormat = "00000000";
//}

if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
//fileSaved = true;
}
catch (Exception ex)
{
//fileSaved = false;
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
}
}
//else
//{
// fileSaved = false;
//}
xlApp.Quit();
GC.Collect();//销毁
// if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
MessageBox.Show(DateTime.Now.ToLocalTime().ToString("yyyyMMddHHmmss") + "保存成功", "提示", MessageBoxButtons.OK);



}
xixihaha_2011_098 2011-10-06
  • 打赏
  • 举报
回复
我使用的是MYXLS组件。导出速度快。而且客户机器没安装OFFICE也可以导出。不会有错误提示


/// <summary>
/// 将DataGirdView数据,导出EXCEL文件.
/// </summary>
/// <param name="dgv">DataGridView控件名称</param>
/// <param name="name">导出excel文件名称</param>
public static void ToExcel(DataGridView dgv, string name)
{
try
{
//总可见列数,总可见行数
int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible);
int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible);

//dataGridView 没有数据提示
if (dgv.Rows.Count == 0 || rowCount == 0)
{
MessageBox.Show("列表中没有数据无法导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
SaveFileDialog save = new SaveFileDialog();
save.Filter = "excel files(*.xls)|*.xls";
save.Title = "请选择要导出数据的位置";
save.FileName = name + DateTime.Now.ToLongDateString();
save.InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
if (save.ShowDialog() == DialogResult.OK)
{
XlsDocument xls = new XlsDocument();//创建空xls文档

xls.FileName = save.FileName;//保存路径,如果直接发送到客户端的话只需要名称 生成名称

Worksheet sheet = xls.Workbook.Worksheets.Add(name); //创建一个工作页为Dome


//设置文档列属性
ColumnInfo cinfo = new ColumnInfo(xls, sheet);//设置xls文档的指定工作页的列属性
cinfo.Collapsed = true;
//设置列的范围 如 0列-10列
cinfo.ColumnIndexStart = 0;//列开始
cinfo.ColumnIndexEnd = 10;//列结束
cinfo.Collapsed = true;
cinfo.Width = 90 * 60;//列宽度
sheet.AddColumnInfo(cinfo);
//设置文档列属性结束

//设置指定工作页跨行跨列
MergeArea ma = new MergeArea(1, 1, 1, dgv.ColumnCount);//从第1行跨到第二行,从第一列跨到第5列
sheet.AddMergeArea(ma);
//设置指定工作页跨行跨列结束

//创建列样式创建列时引用
XF cellXF = xls.NewXF();
cellXF.VerticalAlignment = VerticalAlignments.Centered;
cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
cellXF.Font.Height = 24 * 12;
cellXF.Font.Bold = true;
cellXF.Pattern = 0;//设定单元格填充风格。如果设定为0,则是纯色填充
cellXF.PatternBackgroundColor = Colors.Black;//填充的背景底色
cellXF.PatternColor = Colors.Black;//设定填充线条的颜色
//创建列样式结束

//创建列
Cells cells = sheet.Cells; //获得指定工作页列集合
//列操作基本
Cell cell = cells.Add(1, 1, name, cellXF);//添加标题列返回一个列 参数:行 列 名称 样式对象
//设置XY居中
cell.HorizontalAlignment = HorizontalAlignments.Centered;
cell.VerticalAlignment = VerticalAlignments.Centered;
//设置字体
cell.Font.Bold = true;//设置粗体
cell.Font.ColorIndex = 0;//设置颜色码
cell.Font.FontFamily = FontFamilies.Roman;//设置字体 默认为宋体
//创建列结束

//生成字段名称
int k = 0;
for (int i = 0; i < dgv.ColumnCount; i++)
{
if (dgv.Columns[i].Visible) //不导出隐藏的列
{
Cell title = cells.Add(2, k + 1, dgv.Columns[i].HeaderText);
title.HorizontalAlignment = HorizontalAlignments.Centered;
title.VerticalAlignment = VerticalAlignments.Centered;
k++;
}
}
//填充数据
for (int i = 0; i < dgv.RowCount; i++)
{
k = 1;
for (int j = 0; j < dgv.ColumnCount; j++)
{
if (dgv.Columns[j].Visible) //不导出隐藏的列
{
if (dgv[j, i].ValueType == typeof(string))
{
cells.Add(i + 3, k, "" + dgv[j, i].Value.ToString());


}
else
{
string str = dgv[j, i].Value.ToString();
if (str == "True")
{
str = "是";
}
else if(str =="False")
{
str = "否";
}
cells.Add(i + 3, k, str);
}
}
k++;
}
}

xls.Save(true);//保存
MessageBox.Show("Excel文件导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ce)
{
MessageBox.Show(ce.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
xiaochende02 2011-10-06
  • 打赏
  • 举报
回复
using Microsoft.Office.Interop.Excel;
导入命名空间

下面是我之前做的例子,应该可以直接套用,没试过,你试试看把
try
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.SheetsInNewWorkbook = 2;
excel.Workbooks.Add();
Worksheet sheet = (Worksheet)excel.ActiveWorkbook.Worksheets[1];
sheet.Name = "员工薪酬";

int number1 = 0;
for (int k = 0; k < dataGridView1.Columns.Count; k++)
{
if (dataGridView1.Columns[k].Visible == true)
sheet.Cells[1, k + 1 - number1] = dataGridView1.Columns[k].HeaderText;
else
number1++;
}

for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
int number = 0;
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1.Columns[j].Visible == true)
{
sheet.Cells[i + 2, j + 1 - number] = dataGridView1.SelectedRows[i].Cells[j].Value;
}
else
number++;

}
}
//……
excel.Visible = true;
excel.ActiveWorkbook.SaveAs(Environment.CurrentDirectory
+ "/test.xls", XlFileFormat.xlWorkbookNormal);
excel.ActiveWorkbook.Close();
excel.Quit();
}
catch
{

}
CNCaiNiao 2011-10-06
  • 打赏
  • 举报
回复
可能是我没有说清楚,datawindow是指powerbuilder 的数据窗口,把数据窗口中的数据导出到电子表格。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧