.net 水晶报表。现在已经有DataSet数据源了,现在想要把DataSet导成xls文件。
发布网友
发布时间:2022-05-01 08:41
我来回答
共2个回答
热心网友
时间:2023-10-10 00:17
你现在是要把报表导出吗?还是把DataSet导出?
报表导出的话。
saveFileDialog1.Filter = "Execl2003 files (*.xls)|*.xls|Word2003 files (*.doc)|*.doc|Execl2007 files (*.xlsx)|*.xlsx|Word2007 files (*.docx)|*.docx|PDF files (*.pdf)|*.pdf";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.CreatePrompt = true;
saveFileDialog1.Title = "Export files to...";
DateTime now = DateTime.Now;
saveFileDialog1.FileName = now.Year.ToString().PadLeft(2) + now.Month.ToString().PadLeft(2, '0') + now.Day.ToString().PadLeft(2, '0') + "-" + now.Hour.ToString().PadLeft(2, '0') + now.Minute.ToString().PadLeft(2, '0') + now.Second.ToString().PadLeft(2, '0');
saveFileDialog1.ShowDialog();
if (saveFileDialog1.FileName != "")
{
#region 导出为2003版本的Excel或Word
if (saveFileDialog1.FilterIndex == 1 || saveFileDialog1.FilterIndex == 2)
{
Stream myStream;
myStream = saveFileDialog1.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 - 1; k++)
{
if (k > 0)
{
tempStr += "\t";
}
tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString();
}
sw.WriteLine(tempStr);
}
sw.Close();
myStream.Close();
MessageBox.Show("文件已导出成功");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
}
#endregion
#region 导出为2007版本的Excel
else if (saveFileDialog1.FilterIndex == 3)
{
Microsoft.Office.Interop.Excel.ApplicationClass MyExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
MyExcel.Visible = true;
if (MyExcel == null)
{
MessageBox.Show("EXCEL无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int rowcount = 0;
int columncount = 0;
MyExcel.Application.Workbooks.Add(true);
columncount = this.dataGridView1.ColumnCount - 1;
rowcount = this.dataGridView1.RowCount - 1;
for (int m = 0; m < columncount; m++)
{
MyExcel.Cells[1, m + 1] = this.dataGridView1.Columns[m].HeaderText;
}
for (int i = 0; i < rowcount; i++)
{
for (int j = 0; j < columncount; j++)
{
MyExcel.Cells[i + 2, j + 1] = this.dataGridView1[j, i].Value.ToString();
}
}
}
#endregion
#region 导出为2007版本的Word
else if (saveFileDialog1.FilterIndex == 4)
{
Stream myStream;
myStream = saveFileDialog1.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 - 1; k++)
{
if (k > 0)
{
tempStr += "\t";
}
tempStr += dataGridView1.Rows[j].Cells[k].Value.ToString();
}
sw.WriteLine(tempStr);
}
sw.Close();
myStream.Close();
MessageBox.Show("文件已导出成功");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
}
#endregion
#region 导出为PDF
else if (saveFileDialog1.FilterIndex == 5)
{
//设置导出字体
string FontPath = "C:\\WINDOWS\\Fonts\\simsun.ttc,1";
int FontSize = 12;
Boolean cc = false;
string strFileName;
strFileName = saveFileDialog1.FileName;
//初始化一个目标文档类
//Document document = new Document();
//竖排模式,大小为A4,四周边距均为25
iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.A4, 25, 25, 25, 25);
//横排模式,大小为A4,四周边距均为50
//Document doc = new Document(PageSize.A4.rotate(),50,50,50,50);
//调用PDF的写入方法流
//注意FileMode-Create表示如果目标文件不存在,则创建,如果已存在,则覆盖。
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));
//创建PDF文档中的字体
BaseFont baseFont = BaseFont.CreateFont(
FontPath,
BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
//根据字体路径和字体大小属性创建字体
iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, FontSize);
//打开目标文档对象
document.Open();
//根据数据表内容创建一个PDF格式的表
PdfPTable table = new PdfPTable(dataGridView1.Columns.Count - 1);
for (int j = 0; j < dataGridView1.ColumnCount - 1; j++)
{
table.AddCell(new Phrase(dataGridView1.Columns[j].HeaderText, font));
}
//// 告诉程序这行是表头,这样页数大于1时程序会自动为你加上表头。
table.HeaderRows = 1;
//添加数据
//设置表体背景色
//遍历原gridview的数据行
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count - 1; j++)
{
try
{
table.AddCell(new Phrase(dataGridView1[j, i].Value.ToString(), font));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
cc = true;
}
}
}
//在目标文档中添加转化后的表数据
document.Add(table);
//关闭目标文件
document.Close();
//关闭写入流
writer.Close();
// Dialog
if (!cc)
{
MessageBox.Show("文件已导出成功!", "生成成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
#endregion
}
else
{
MessageBox.Show("文件名不能为空!");
}
别忘记了上面
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Word;
要是是dataset 导出的话。
INSERT INTO OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',
'Excel 5.0;DATABASE=c:\03-20.xls' )...[Sheet1$]
SELECT * FROM [1120].[dbo].[zwh_House_WEBDB] where
datediff(d,getOn,getdate())=0追问这个程序是运行在服务器上的,不可以使用OFFICE的插件。
我是要把一DataTable里的数据绘制成《线状统计图》,然后再导出到Excel文件里,现在就是不知道这个表怎么绘制.
我的横坐标是一个日期类型的日期
纵坐标是0~1000的数据
我设置的是on change of 为dataTime
show value(s) 为 一个int 类型的值。
现在不明白的是这个图怎么绘制,我的字段导出到EXCEL文件里都有值,但绘制成图表的时候值全是1了。图表是错的。
热心网友
时间:2023-10-10 00:17
用MSchart 控件绑定你的dataset。。然后会生成一张图片,找到这个路径 然后导出到xls 。不行吗追问你好,朋友,我用的是控制台应用程序,不可以用控件的。能再帮我分析一下吗?