惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
V
Visual Studio Blog
宝玉的分享
宝玉的分享
IT之家
IT之家
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
I
InfoQ
B
Blog RSS Feed
T
Threatpost
博客园_首页
M
MIT News - Artificial intelligence
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Know Your Adversary
Know Your Adversary
U
Unit 42
Engineering at Meta
Engineering at Meta
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
Scott Helme
Scott Helme
T
Tor Project blog
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
S
Schneier on Security
Vercel News
Vercel News
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
L
LangChain Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
S
Security Affairs
A
About on SuperTechFans
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
大猫的无限游戏
大猫的无限游戏
W
WeLiveSecurity
Cisco Talos Blog
Cisco Talos Blog
罗磊的独立博客

博客园 - pcsky(进哥)

查看Windows下引起Oracle CPU占用率高的神器-qslice 解决BlogEngine.Net系统 Inove主题 在IE6下错位的问题 [原创]asp.net 2.0下的自定义树(myTreeView) Visual Studio .NET 2003中自己找到的一个小技巧[图] [函数]截取固定长的字符串(双字节的计2位) 在线人数统计 V1.0(Asp.net+ SqlServer) 源码下载 Visual Studio 2005安装后,原来的Asp.net1.1不能执行的解决方法。 多表连接的SQL写法(SqlServer、Oracle) .Net自动生成Html新闻系统V1.0 Beta 下载 偶用花生壳建了个网站,大家可以去看看 Oracle在.Net开发上的一点经验 pcsky(原作) 大家都在看哪些.Net的书啊? ASP.net 写文件的函数(内容,路径,文件名) pcsky(原作) 推荐一本好书:《软件工程思想》 SqlServer存储过程编写经验和优化措施 [转载] 网站信息统计的简单实现过程 pcsky(原作) Asp.Net中检查登陆信息,使用全局过程 pcsky(原作) ODP.NET oracle .NET 数据库访问[转载] 第一次安装Oracle9i
DataSet2Excel类(仿Golden32)
pcsky(进哥) · 2008-02-22 · via 博客园 - pcsky(进哥)

实现类似于Golden32导出Excel的一个类。
1、调用Excel直接打开导出结果
2、直接用块的方式写入Excel,提高了性能
3、数字型、日期型的数据能自动识别
4、设置单元格的格式用先列再行的方式,上万行记录也轻松对付。

因工作的需要,要把人事系统的查询结果导出到Excel中。
其中工号、日期字段导到Excel就变成了数值型和英文的日期格式,需要再手工设置格式,很麻烦。
参考了网上导出Excel的各种文章,解决了一些性能问题,终于完成了这个类~~

public static void Dst2Excel(ref DataSet _dst)
{
    
try
    
{
        Excel.Application xlApp 
= new Excel.Application();
        
if (xlApp == null)
        
{
            MessageBox.Show(
"Can't find Excel Object!");
            
return;
        }

        
if (_dst == null || _dst.Tables.Count <= 0)
        
{
            MessageBox.Show(
"无显示数据,请查询库数据或导入数据!!!");
            
return;
        }

        xlApp.Visible 
= true;

        
object missing = System.Reflection.Missing.Value;
        
int countcolumns = _dst.Tables[0].Columns.Count;
        
int countrows = _dst.Tables[0].Rows.Count;
        
string A = Get_TableHeader(countcolumns);
        
object[,] myvalues1 = new object[countrows + 1, countcolumns];

        Excel.Workbooks workbooks 
= xlApp.Workbooks;
        Excel.Workbook theWorkbook 
= workbooks.Add(missing);
        Excel.Sheets sheets 
= theWorkbook.Worksheets;
        Excel.Worksheet worksheet 
= (Excel.Worksheet)sheets.get_Item(1);
        Excel.Range range 
= worksheet.get_Range("A1", A + (countrows + 1).ToString());

        
// 标题行
        for (int j = 0; j < countcolumns; j++)
        
{
            myvalues1[
0, j] = _dst.Tables[0].Columns[j].Caption;
        }


        
// 内容行
        for (int j = 0; j < countcolumns; j++)
        
{
            
switch (_dst.Tables[0].Columns[j].DataType.ToString())
            
{
                
case "System.String":
                    worksheet.get_Range(worksheet.Cells[
1, j + 1], worksheet.Cells[countrows + 1, j + 1]).NumberFormatLocal = "@";
                    
break;
                
case "System.DateTime":
                    worksheet.get_Range(worksheet.Cells[
1, j + 1], worksheet.Cells[countrows + 1, j + 1]).NumberFormatLocal = "yyyy-mm-dd";
                    
break;
            }


            
for (int i = 1; i < countrows + 1; i++)
            
{
                myvalues1[i, j] 
= _dst.Tables[0].Rows[i - 1][j];
            }

        }


        range.Cells.Value2 
= myvalues1;
        workbooks 
= null;
        theWorkbook 
= null;
        sheets 
= null;
        worksheet 
= null;
        range 
= null;
        xlApp 
= null;
    }

    
catch (Exception ee)
    
{
        MessageBox.Show(ee.ToString());
    }

    
finally
    
{
        GC.Collect();
    }

}


public static string Get_TableHeader(int num)
{

    
string A = "";
    
for (int i = 0; i < num; i++)
    
{
        
if ((65 + i) < 91)
            A 
= ((char)(65 + i)).ToString();
        
else

            A 
= "A" + ((char)(i + 39)).ToString();   //i+39:Z后的字符转成A、B

    }

    
return A;
}