public void AllDataSetToExcel(DataSet ds)
{
string saveFileName = "";
bool fileSaved = false;
Microsoft.Win32.SaveFileDialog saveDialog = new Microsoft.Win32.SaveFileDialog();
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = "库存 " + DateTime.Today.ToString("yyyy-MM-dd");
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.Workbook workbook = xlApp.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
Microsoft.Office.Interop.Excel.Range range;

// 列索引,行索引,总列数,总行数
int colIndex = 0;
int RowIndex = 0;
int colCount = ds.Tables[0].Columns.Count;
int RowCount = ds.Tables[0].Rows.Count;

// *****************获取数据*********************
// 创建缓存数据
object[,] objData = new object[RowCount + 1, colCount];
// 获取列标题
for (int k = 0; k < ds.Tables[0].Columns.Count; k++)
{
if (ds.Tables[0].Columns[k].ColumnName == "sgAcName") ds.Tables[0].Columns[k].ColumnName = "操作员";
if (ds.Tables[0].Columns[k].ColumnName == "sgCode") ds.Tables[0].Columns[k].ColumnName = "美国转运单号";
if (ds.Tables[0].Columns[k].ColumnName == "sgLbs") ds.Tables[0].Columns[k].ColumnName = "重量(公斤)";
if (ds.Tables[0].Columns[k].ColumnName == "sgPin") ds.Tables[0].Columns[k].ColumnName = "用户标识(字母)";
if (ds.Tables[0].Columns[k].ColumnName == "sgStoreCode") ds.Tables[0].Columns[k].ColumnName = "仓储位置(字母+数字)";
if (ds.Tables[0].Columns[k].ColumnName == "sgPort") ds.Tables[0].Columns[k].ColumnName = "仓库";
if (ds.Tables[0].Columns[k].ColumnName == "sgTPRemark") ds.Tables[0].Columns[k].ColumnName = "内部备注";
if (ds.Tables[0].Columns[k].ColumnName == "sgTime") ds.Tables[0].Columns[k].ColumnName = "操作日期";
if (ds.Tables[0].Columns[k].ColumnName == "sgZbDate") ds.Tables[0].Columns[k].ColumnName = "收件日期";
objData[RowIndex, colIndex++] = ds.Tables[0].Columns[k].ColumnName.ToString();
}

// 获取具体数据
for (RowIndex = 0; RowIndex < RowCount; RowIndex++)
{
for (colIndex = 0; colIndex < colCount; colIndex++)
{

objData[RowIndex + 1, colIndex] = ds.Tables[0].Rows[RowIndex][colIndex];
}

}
//********************* 写入Excel*******************
range = worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)xlApp.Cells[1, 1], (Microsoft.Office.Interop.Excel.Range)xlApp.Cells[RowCount + 1, colCount]);
range.Value2 = objData;
range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
Application.DoEvents();

// //*******************设置输出格式******************************

////设置顶部説明
//range = worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)xlApp.Cells[1, 1], (Microsoft.Office.Interop.Excel.Range)xlApp.Cells[1, colCount]);
//range.MergeCells = true;
//range.RowHeight = 38;
//range.Font.Bold = true;
//range.Font.Size = 14;
//range.Font.ColorIndex = 10;//字体颜色
//xlApp.ActiveCell.FormulaR1C1 = "导入记录查询结果";

//特殊数字格式
range = worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)xlApp.Cells[2, 8], (Microsoft.Office.Interop.Excel.Range)xlApp.Cells[RowCount + 1, 8]);
range.NumberFormat = "yyyy-MM-dd hh:mm:ss";

//特殊数字格式
range = worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)xlApp.Cells[2, 9], (Microsoft.Office.Interop.Excel.Range)xlApp.Cells[RowCount + 1, 9]);
range.NumberFormat = "yyyy-MM-dd hh:mm:ss";

xlApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
range = worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)xlApp.Cells[1, 1], (Microsoft.Office.Interop.Excel.Range)xlApp.Cells[1, colCount]);
// range.Interior.ColorIndex = 10;//背景色
range.Interior.Color = Color.Yellow;
range.Font.Bold = true;
range.RowHeight = 20;
//range.Cells.Columns.AutoFit();

((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 1]).ColumnWidth = 15;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 2]).ColumnWidth = 35;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 3]).ColumnWidth = 15;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 4]).ColumnWidth = 15;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 5]).ColumnWidth = 12;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 6]).ColumnWidth = 10;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 7]).ColumnWidth = 28;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 8]).ColumnWidth = 28;
((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 9]).ColumnWidth = 28;

//***************************保存 * *********************
if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveAs(saveFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8);
fileSaved = true;
MessageBox.Show("Export Excel success");
}
catch (Exception ex)
{
fileSaved = false;
MessageBox.Show("导出文件时出错,文件可能正被打开!/n" + ex.Message);
}
}
else
{
fileSaved = false;
}
xlApp.Quit();
GC.Collect();//强行销毁

}
#endregion

winform导出excel的更多相关文章

  1. Winform 导出Excel

    private void 导出excelToolStripMenuItem_Click(object sender, EventArgs e) { ) { var saveFileDialog1 = ...

  2. c# winform导出Excel

    //需要注意添加引用Microsoft.Office.Interop.Excel.dll string fileName =DateTime.Now.Year+ DateTime.Now.Month+ ...

  3. C#导入导出Excel表的数据

    一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...

  4. winform导入导出excel,后台动态添加控件

    思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...

  5. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  6. C# winform 导出导入Excel/Doc 完整实例教程[网上看到的]

    还真没做过winform的导出导入,今天上网百度了一下.结果--- 所以还是我自己写个吧.之前做过web的,半搬半做就OK. 1添加引用:Aspose.Cells.dll(我们就叫工具包吧,可以从网上 ...

  7. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  8. NPOI导入导出EXCEL通用类,可直接使用在WinForm项目中

    由于XSSFWorkbook类型的Write方法限制,Write完成后就自动关闭流数据,所以无法很好的支持的Web模式,网上目前也未找到好的解决方案. 注意:若直接使用在WinForm项目中,必需先下 ...

  9. C#+Aspose.Cells 导出Excel及设置样式 (Webform/Winform)

    在项目中用到,特此记录下来,Aspose.Cells 不依赖机器装没有装EXCEL都可以导出,很方便.具体可以参考其他 http://www.aspose.com/docs/display/cells ...

随机推荐

  1. java调用shell脚本执行操作

    //定时清空 日志 String shellString = "sh /home/jyapp/delete_log.sh"; Process process = Runtime.g ...

  2. B 等差素数列

    B 等差素数列:2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列.上边的数列公差为30,长度为6.2004年,格 ...

  3. 2020 CCPC-Wannafly Winter Camp Day2

    2020 CCPC-Wannafly Winter Camp Day2 A 托米的字符串 虽然每个子串出现的概率是相同的,但是同一长度的子串个数是不同的,所以要分别处理.计算出某一长度的情况下,元音字 ...

  4. Codeforces Round #579 (Div. 3) B Equal Rectangles、C. Common Divisors

    B Equal Rectangles 题意: 给你4*n个数,让你判断能不能用这个4*n个数为边凑成n个矩形,使的每个矩形面积相等 题解: 原本是想着用二分来找出来那个最终的面积,但是仔细想一想,那个 ...

  5. HDU 2897 邂逅明下(巴士变形)

    题意: 给你n个石子,你最少取p个,最多取q个,问谁能赢 题解: 变形版的巴什博弈,当n>=q+1的时候,那么还是以q+1为一组拿走,剩下一个(n%(q+1)),这个时候如果它小于p的话都直接输 ...

  6. hdu1263 水果

    Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样J ...

  7. HDU 3605 Escape 最大流

    题意: 如果这是2012年世界末日怎么办?我不知道该怎么做.但是现在科学家们已经发现,有些星球上的人可以生存,但有些人却不适合居住.现在科学家们需要你的帮助,就是确定所有人都能在这些行星上生活.输入多 ...

  8. Spring web之restTemplate超时问题处理

    问题 项目中有个远程服务因为某些原因会访问不通,于是就在调用的那一步挂起无法结束了. 查看代码 代码大概如下 CloseableHttpClient closeableHttpClient = Htt ...

  9. Redis性能指标监控

    监控指标 •性能指标:Performance•内存指标: Memory•基本活动指标:Basic activity•持久性指标: Persistence•错误指标:Error 性能指标:Perform ...

  10. ArcGIS处理栅格数据(一)

    一.建立影像金字塔 ArcToolbox--数据管理工具--栅格--栅格属性--构建金字塔(pyramid) 说明:该方式一次只能为一张影像数据建立影像金字塔. ArcToolbox--数据管理工具- ...