`
菊花一斤
  • 浏览: 19675 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

asp.net c#开发中对excel的操作方法与实现代码

阅读更多
system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using microsoft.office.interop.excel;
using system.data.sqlclient;
using system.data.oledb;
using system.reflection;
namespace excelprj
{
    /// <summary>
    /// excel 系统中的主文件excel.exe 本身就是 com 组件,通过在.net 项目中引用exel.exe 文件可以实现对excel 的功能控制
    /// 与com 组件相互操作是通过使用"包装类"(wrapper class) 和"代理"(proxy) 的机制实现的.包装类使.net 程序可以识别com 组件提供的接口,而代理类则是提供对 com 接口的访问
    /// </summary>
    public partial class form1 : form
    {
        public form1()
        {
            initializecomponent();
        }
        private void button3_click(object sender, eventargs e)
        {
            exporttasks(bind(), datagridview1);
        }
        //如果 excel 安装在计算机上,侧导出表格内容到 excel
        public void exporttasks(dataset tasksdata, datagridview tasksgridview)
        {
            // 定义要使用的excel 组件接口
            // 定义application 对象,此对象表示整个excel 程序
            microsoft.office.interop.excel.application excelapp = null ;
            // 定义workbook对象,此对象代表工作薄
            microsoft.office.interop.excel.workbook workbook;
            // 定义worksheet 对象,此对象表示execel 中的一张工作表
            microsoft.office.interop.excel.worksheet ws=null;
            //定义range对象,此对象代表单元格区域
            microsoft.office.interop.excel.range r;
            int row = 1; int cell = 1;
            try
            {
              //初始化 application 对象 excelapp
                excelapp = new microsoft.office.interop.excel.application();
                //在工作薄的第一个工作表上创建任务列表
                workbook = excelapp.workbooks.add(xlwbatemplate.xlwbatworksheet);
                ws =(worksheet)workbook.worksheets[1];
                // 命名工作表的名称为 "task management"
                ws.name = "task management";
                #region 创建表格的列头
                // 遍历数据表中的所有列
                foreach (datagridviewcolumn cs in tasksgridview.columns)
                {
                    // 假如并不想把主键也显示出来
                    if (cs.headertext != "编号")
                    {
                        ws.cells[row, cell] = cs.headertext;
                        r = (range)ws.cells[row, cell];
                        ws.get_range(r, r).horizontalalignment = microsoft.office.interop.excel.xlvalign.xlvaligncenter;
            
                        //此处用来设置列的样式
                        cell++;
                    }
                }
          
                // 创建行,把数据视图记录输出到对应的excel 单元格
                for (int i = 2; i < tasksdata.tables[0].rows.count; i++)
                {
                    for (int j = 1; j < tasksdata.tables[0].columns.count; j++)
                    {
                      
                        ws.cells[i, j] = tasksdata.tables[0].rows[i][j].tostring();
                      // r = (range)ws.cells[i,j];
                        range rg = (range)ws.get_range(ws.cells[i, j], ws.cells[i, j]);
                        rg.entirecolumn.columnwidth = 20;
                  //    rg.columns.autofit();
                        rg.numberformatlocal = "@";
                    }
                }
                #endregion
            }
            catch (exception ex)
            {
                messagebox.show(ex.tostring());
            }
          
            //显示 excel
            excelapp.visible = true;        
          
        }
        private void button5_click(object sender, eventargs e)
        {
            dataset ds = bind();
            datagridview1.datasource = ds.tables[0];
        }
        private dataset bind()
        {
            sqlconnection conn = new sqlconnection("server=.;database=testmanage;integrated security=sspi");
            sqldataadapter da = new sqldataadapter("select fnumber,fexamnum,fname,fsex,fjobadd,fcardid,fbirdate from stuinfo", conn);
            dataset ds = new dataset();
            da.fill(ds);
            return ds;
        }
        private void button2_click(object sender, eventargs e)
        {
            savefiledialog sfd = new savefiledialog();
            sfd.title = "请选择将导出的excel文件存放路径";
            sfd.filename = system.datetime.now.toshortdatestring() + "-学生信息";
            sfd.filter = "excel文档(*.xls)|*.xls";
            sfd.showdialog();
        
            if (sfd.filename != "")
            {
              
                microsoft.office.interop.excel.application excelapp = new microsoft.office.interop.excel.application();
                if (excelapp == null)
                {
                    messagebox.show("无法创建excel对象,可能您的机器未安装excel");
                }
                else
                {
                    microsoft.office.interop.excel.workbooks workbooks = excelapp.workbooks;
                    microsoft.office.interop.excel.workbook workbook = workbooks.add(xlwbatemplate.xlwbatworksheet);
                    microsoft.office.interop.excel.worksheet worksheet =(worksheet) workbook.worksheets[1];
                    dataset ds=bind();
                    for (int i = 1; i < ds.tables[0].rows.count; i++)
                    {
                        for (int j = 1; j < ds.tables[0].columns.count;j++ )
                        {
                            if (i == 1)
                            {
                                worksheet.cells[i, j] = datagridview1.columns[j].headertext;
                              
                            }
                            worksheet.cells[i+1, j] = ds.tables[0].rows[i][j].tostring();
                        }
                    }
                    //保存方式一:保存workbook
                      //workbook.saveas(@"f:cdata.xls",
                      // missing.value,missing.value,missing.value,missing.value,missing.value,
                      // microsoft.office.interop.excel.xlsaveasaccessmode.xlnochange,missing.value,missing.value,missing.value,
                      // missing.value,missing.value);
                      //保存方式二:保存worksheet
                      // worksheet.saveas(@"f:cdata2.xls",
                      // missing.value, missing.value, missing.value, missing.value,
                      // missing.value, missing.value, missing.value, missing.value, missing.value);
                    ////保存方式三
                    //workbook.saved = true;
                    //workbook.savecopyas(sfd.filename);
              
                    system.runtime.interoervices.marshal.releasecomobject(worksheet);
                    worksheet = null;
                    system.runtime.interopservices.marshal.releasecomobject(workbook);
                    workbook = null;
                    workbooks.close();
                    system.runtime.interopservices.marshal.releasecomobject(workbooks);
                    workbooks = null;
                    excelapp.quit();
                    system.runtime.interopservices.marshal.releasecomobject(excelapp);
                    excelapp = null;
                    messagebox.show("导出excel完成!");
                }
            }
        
        }
        private void button4_click(object sender, eventargs e)
        {
            string strexcelfilename = @"f:2007-07-16-学生信息.xls";
            string strsheetname = "sheet1";
            #region aspnet 操作excel  正确
            ////源的定义
            //string strconn = "provider=microsoft.jet.oledb.4.0;data source = " + strexcelfilename + ";extended properties ='excel 8.0;hdr=no;imex=1'";
            ////sql语句
            //string strexcel = "select * from  [" + strsheetname + "$]";
            ////定义存放的数据表
            //dataset ds = new dataset();
            ////连接数据源
            //oledbconnection conn = new oledbconnection(strconn);
            //conn.open();
            ////适配到数据源
            //oledbdataadapter adapter = new oledbdataadapter(strexcel, conn);
            //adapter.fill(ds,"res");
            //conn.close();
            //// 一般的情况下. excel  表格的第一行是列名
            //datagridview2.datasource = ds.tables["res"];
            #endregion
            #region com 组件读取复杂excel
            microsoft.office.interop.excel.application excelapp = null;
            microsoft.office.interop.excel.workbook workbook;
            microsoft.office.interop.excel.worksheet ws = null;
            try
            {
                excelapp = new microsoft.office.interop.excel.application();
                workbook = excelapp.workbooks.open(@"f:book1.xls", missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value, missing.value);
                ws = (worksheet)workbook.worksheets[1];
                      
                //excel 默认为 256www.3ppt.com 列..
                messagebox.show(ws.cells.columns.count.tostring());
                excelapp.quit();
            }
            catch (exception ex)
            {
                throw ex;
            }
            #endregion
        }
    }
}


一些excel操作详解

一)   使用动态创建的方法

首先创建   excel   对象,使用comobj:
var   excelapp:   variant;
excelapp   :=   createoleobject(   'excel.application '   );

1)   显示当前窗口:
excelapp.visible   :=   true;

2)   更改   excel   标题栏:
excelapp.caption   :=   '应用程序调用   microsoft   excel ';

3)   添加新工作簿:
excelapp.workbooks.add;

4)   打开已存在的工作簿:
excelapp.workbooks.open(   'c:exceldemo.xls '   );

5)   设置第2个工作表为活动工作表:
excelapp.worksheets[2].activate; 
或 
excelapp.workssheets[   'sheet2 '   ].activate;

6)   给单元格赋值:
excelapp.cells[1,4].value   :=   '第一行第四列 ';

7)   设置指定列的宽度(单位:字符个数),以第一列为例:
excelapp.activesheet.columns[1].columnswidth   :=   5;

8)   设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
excelapp.activesheet.rows[2].rowheight   :=   1/0.035;   //   1厘米

9)   在第8行之前插入分页符:
excelapp.worksheets[1].rows[8].pagebreak   :=   1;

10)   在第8列之前删除分页符:
excelapp.activesheet.columns[4].pagebreak   :=   0;

11)   指定边框线宽度:
excelapp.activesheet.range[   'b3:d4 '   ].borders[2].weight   :=   3;
1-左   2-右   3-顶   4-底   5-斜(      )   6-斜(   /   )

12)   清除第一行第四列单元格公式:
excelapp.activesheet.cells[1,4].clearcontents;

13)   设置第一行字体属性:
excelapp.activesheet.rows[1].font.name   :=   '隶书 ';
excelapp.activesheet.rows[1].font.color   :=   clblue;
excelapp.activesheet.rows[1].font.bold   :=   true;
excelapp.activesheet.rows[1].font.underline   :=   true;

14)   进行页面设置:

a.页眉:
        excelapp.activesheet.pagesetup.centerheader   :=   '报表演示 ';
b.页脚:
        excelapp.activesheet.pagesetup.centerfooter   :=   '第&p页 ';
c.页眉到顶端边距2cm:
        excelapp.activesheet.pagesetup.headermargin   :=   2/0.035;
d.页脚到底端边距3cm:
        excelapp.activesheet.pagesetup.headermargin   :=   3/0.035;
e.顶边距2cm:
        excelapp.activesheet.pagesetup.topmargin   :=   2/0.035;
f.底边距2cm:
        excelapp.activesheet.pagesetup.bottommargin   :=   2/0.035;
g.左边距2cm:
        excelapp.activesheet.pagesetup.leftmargin   :=   2/0.035;
h.右边距2cm:
        excelapp.activesheet.pagesetup.rightmargin   :=   2/0.035;
i.页面水平居中:
        excelapp.activesheet.pagesetup.centerhorizontally   :=   2/0.035;
j.页面垂直居中:
        excelapp.activesheet.pagesetup.centervertically   :=   2/0.035;
k.打印单元格网线:
        excelapp.activesheet.pagesetup.printgridlines   :=   true;

15)   拷贝操作:

a.拷贝整个工作表:
        excelapp.activesheet.used.range.copy;
b.拷贝指定区域:
        excelapp.activesheet.range[   'a1:e2 '   ].copy;
c.从a1位置开始粘贴:
        excelapp.activesheet.range.[   'a1 '   ].pastespecial;
d.从文件尾部开始粘贴:
        excelapp.activesheet.range.pastespecial;

16)   插入一行或一列:
a.   excelapp.activesheet.rows[2].insert;
b.   excelapp.activesheet.columns[1].insert;

17)   删除一行或一列:
a.   excelapp.activesheet.rows[2].delete;
b.   excelapp.activesheet.columns[1].delete;

18)   打印预览工作表:
excelapp.activesheet.printpreview;

19)   打印输出工作表:
excelapp.activesheet.printout;

20)   工作表保存:
if   not   excelapp.activeworkbook.saved   then
      excelapp.activesheet.printpreview;

21)   工作表另存为:
excelapp.saveas(   'c:exceldemo1.xls '   );

22)   放弃存盘:
excelapp.activeworkbook.saved   :=   true;

23)   关闭工作簿:
excelapp.workbooks.close;

24)   退出   excel:
excelapp.quit;

(二)   使用delphi   控件方法
在form中分别放入excelapplication,   excelworkbook和excelworksheet。 

1)   打开excel 
excelapplication1.connect;

2)   显示当前窗口:
excelapplication1.visible[0]:=true;

3)   更改   excel   标题栏:
excelapplication1.caption   :=   '应用程序调用   microsoft   excel ';

4)   添加新工作簿:
excelworkbook1.connectto(excelapplication1.workbooks.add(emptyparam,0));
      5)   添加新工作表:
var   temp_worksheet:   _worksheet;
begin
temp_worksheet:=excelworkbook1.
worksheets.add(emptyparam,emptyparam,emptyparam,emptyparam,0)   as   _worksheet;
excelworksheet1.connectto(temp_worksheet);
end;
      6)   打开已存在的工作簿:
excelapplication1.workbooks.open   (c:a.xls
emptyparam,emptyparam,emptyparam,emptyparam,
emptyparam,emptyparam,emptyparam,emptyparam,
        emptyparam,emptyparam,emptyparam,emptyparam,0)

7)   设置第2个工作表为活动工作表:
excelapplication1.worksheets[2].activate;   或
excelapplication1.workssheets[   'sheet2 '   ].activate;

8)   给单元格赋值:
excelapplication1.cells[1,4].value   :=   '第一行第四列 ';

9)   设置指定列的宽度(单位:字符个数),以第一列为例:
excelapplication1.activesheet.columns[1].columnswidth   :=   5;

10)   设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
excelapplication1.activesheet.rows[2].rowheight   :=   1/0.035;   //   1厘米

11)   在第8行之前插入分页符:
excelapplication1.worksheets[1].rows[8].pagebreak   :=   1;

12)   在第8列之前删除分页符:
excelapplication1.activesheet.columns[4].pagebreak   :=   0;

13)   指定边框线宽度:
excelapplication1.activesheet.range[   'b3:d4 '   ].borders[2].weight   :=   3;
1-左   2-右   3-顶   4-底   5-斜(      )   6-斜(   /   )

14)   清除第一行第四列单元格公式:
excelapplication1.activesheet.cells[1,4].clearcontents;

15)   设置第一行字体属性:
excelapplication1.activesheet.rows[1].font.name   :=   '隶书 ';
excelapplication1.activesheet.rows[1].font.color   :=   clblue;
excelapplication1.activesheet.rows[1].font.bold   :=   true;
excelapplication1.activesheet.rows[1].font.underline   :=   true;

16)   进行页面设置:
  a.页眉:
        excelapplication1.activesheet.pagesetup.centerheader   :=   '报表演示 ';
b.页脚:
        excelapplication1.activesheet.pagesetup.centerfooter   :=   '第&p页 ';
c.页眉到顶端边距2cm:
        excelapplication1.activesheet.pagesetup.headermargin   :=   2/0.035;
d.页脚到底端边距3cm:
        excelapplication1.activesheet.pagesetup.headermargin   :=   3/0.035;
e.顶边距2cm:
        excelapplication1.activesheet.pagesetup.topmargin   :=   2/0.035;
f.底边距2cm:
        excelapplication1.activesheet.pagesetup.bottommargin   :=   2/0.035;
g.左边距2cm:
        excelapplication1.activesheet.pagesetup.leftmargin   :=   2/0.035;
h.右边距2cm:
        excelapplication1.activesheet.pagesetup.rightmargin   :=   2/0.035;
i.页面水平居中:
        excelapplication1.activesheet.pagesetup.centerhorizontally   :=   2/0.035;
j.页面垂直居中:
        excelapplication1.activesheet.pagesetup.centervertically   :=   2/0.035;
k.打印单元格网线:
        excelapplication1.activesheet.pagesetup.printgridlines   :=   true;

17)   拷贝操作:

a.拷贝整个工作表:
        excelapplication1.activesheet.used.range.copy;

b.拷贝指定区域:
        excelapplication1.activesheet.range[   'a1:e2 '   ].copy;

c.从a1位置开始粘贴:
        excelapplication1.activesheet.range.[   'a1 '   ].pastespecial;

d.从文件尾部开始粘贴:
        excelapplication1.activesheet.range.pastespecial;

18)   插入一行或一列:
a.   excelapplication1.activesheet.rows[2].insert;
b.   excelapplication1.activesheet.columns[1].insert;

19)   删除一行或一列:
a.   excelapplication1.activesheet.rows[2].delete;
b.   excelapplication1.activesheet.columns[1].delete;

20)   打印预览工作表:
excelapplication1.activesheet.printpreview;

21)   打印输出工作表:
excelapplication1.activesheet.printout;

22)   工作表保存:
if   not   excelapplication1.activeworkbook.saved   then
      excelapplication1.activesheet.printpreview;

23)   工作表另存为:
excelapplication1.saveas(   'c:exceldemo1.xls '   );

24)   放弃存盘:
excelapplication1.activeworkbook.saved   :=   true;

25)   关闭工作簿:
excelapplication1.workbooks.close;

26)   退出   excel:
excelapplication1.quit;
excelapplication1.disconnect;

(三)   使用delphi   控制excle二维图
在form中分别放入excelapplication,   excelworkbook和excelworksheet
var   asheet1,achart,   range:variant;

1)选择当第一个工作薄第一个工作表
asheet1:=excelapplication1.workbooks[1].worksheets[1];

2)增加一个二维图
achart:=asheet1.chartobjects.add(100,100,200,200);

3)选择二维图的形态
achart.chart.charttype:=4;

4)给二维图赋值
series:=achart.chart.seriescollection;
range:=sheet1!r2c3:r3c9;
series.add(range,true);
      5)加上二维图的标题
achart.chart.hastitle:=true;
achart.chart.charttitle.characters.text:=’   excle二维图’ 

6)改变二维图的标题字体大小
achart.chart.charttitle.font.size:=6;
分享到:
评论

相关推荐

    ASP.NET(c#) EXCEL操作类

    ASP.NET(C#)Excel操作类是一个用于在.NET环境中处理Microsoft Excel文件的工具类库。在ASP.NET(C#)项目中,这类库通常用于读取、写入、修改或创建Excel工作簿,以实现数据导入导出等功能。以下是这个主题的一些...

    C# asp.net 操作Excel

    C#与ASP.NET环境下的Excel操作 在C# ASP.NET项目中,操作Excel通常有两种主流方法:一是使用Microsoft Office Interop组件,二是借助第三方库如EPPlus或NPOI。给定的代码片段采用的是第一种方式,即利用Microsoft....

    ASP.NET/C# 使用NPOI 将数据导入到模板Excel[支持xlsx][源代码]

    在ASP.NET/C#开发环境中,有时我们需要处理Excel文件,例如将数据库中的数据导出到预设的Excel模板中。在这种情况下,NPOI是一个非常有用的库,它允许开发者读写Microsoft Office格式的文件,包括Excel的.xlsx和.xls...

    asp.net+Ajax实现Excel文件导出

    本篇文章将详细讲解如何利用ASP.NET与Ajax技术实现在Web应用中导出Excel文件。 首先,ASP.NET是Microsoft开发的一个用于构建动态网站、Web应用程序和服务的框架。它基于.NET Framework,提供了丰富的服务器控件、...

    【ASP.NET编程知识】asp.net生成Excel并导出下载五种实现方法.docx

    在ASP.NET编程中,生成Excel并导出下载是一项常见的需求,尤其在数据分析和报表生成时。以下是五种不同的实现方法: 1. **方法一:通过GridView** GridView控件是ASP.NET中用于显示数据的常用组件。这种方法适用于...

    Excel 导入导出 (asp.net/c#)

    在ASP.NET和C#开发中,处理Excel文件是一项常见的任务,比如从Excel文件中导入数据到数据库,或者将数据库中的数据导出到Excel文件供用户下载。标题"Excel 导入导出 (asp.net/c#)"所涉及的核心知识点主要包括Excel...

    方便实用的用asp.net(c#)实现的excel文件的导入实例源码

    在ASP.NET(C#)开发环境中,处理Excel文件是一项常见的任务,这通常涉及到数据的导入与导出。本文将详细讲解如何使用C#语言在ASP.NET中实现Excel文件的导入功能,以及涉及到的关键知识点。 首先,我们需要理解的是...

    ASP.net Excel 操作实例

    综上所述,ASP.NET中的Excel操作涉及到多种技术和策略,根据项目需求和环境,可以选择适合的方法。无论是使用Interop、Open XML SDK还是NPOI,都需要了解其基本原理,掌握如何创建、读取、写入和操作Excel文件,以便...

    ASP.NET (C#) 生成Excel 导出Excel

    ASP.NET (C#) 生成Excel并导出Excel是一个常见的需求,在Web应用中,用户可能需要将数据库中的数据导出为Excel格式以便于分析或离线处理。在.NET框架下,我们可以利用C#语言和微软提供的COM互操作库Microsoft.Office...

    ASP.NET中把Gridview导出为EXCEL

    在ASP.NET开发中,将Gridview控件中的数据导出到Excel是一种常见的需求,这有助于用户方便地管理和处理大量数据。下面将详细讲解如何实现这一功能,并解决中文乱码问题。 首先,我们需要理解ASP.NET Gridview的基本...

    在Asp.net用C#建立动态Excel

    在ASP.NET中使用C#生成Excel文件通常有两种方法:一种是使用Microsoft Office Interop组件直接操作Excel应用程序;另一种是生成CSV文件,然后让用户将其打开为Excel格式。本文主要介绍前者的方法。 #### 代码实现 ...

    c#.netweb页面嵌入excel控件,网页中在线编辑EXCEL表格实例

    在.NET开发环境中,C#与ASP.NET结合可以实现丰富的Web应用程序功能,其中之一就是在网页中嵌入Excel控件,使得用户可以在浏览器中直接编辑和浏览Excel表格。本实例以"C#.NET Web页面嵌入Excel控件,网页中在线编辑...

    Asp.net(C#)导出Excel

    总的来说,Asp.net(C#)导出Excel是一项涉及到文件操作、数据处理和用户交互的复杂任务,但通过合理选择库和优化代码,我们可以实现高效、灵活的Excel导出功能。在开发过程中,一定要注意错误处理和资源释放,确保...

    基于ASP.NET实现的DataTableToExcel(Excel导入导出)实例源码

    在.NET开发环境中,ASP.NET和C#的组合为我们提供了丰富的功能来处理各种Web应用程序的需求。在实际业务场景中,数据的导入导出是一项常见的任务,尤其是与Excel的交互,因为Excel是广泛使用的数据管理和分析工具。...

    ASP.NET C# DataTable与Excel互操作示例.txt

    根据提供的文件信息,我们可以深入探讨ASP.NET C#中如何实现DataTable与Excel之间的互操作。这一技术在实际工作中非常实用,特别是在需要将数据从数据库导出到Excel文件供用户下载,或者将Excel文件中的数据导入到...

    导出Excel案例. asp.net c#.rar

    首先,我们需要了解ASP.NET是微软开发的一个用于构建Web应用程序的框架,而C#是一种广泛使用的编程语言,常与ASP.NET结合使用。在ASP.NET中导出Excel,通常有以下几种方法: 1. **使用Microsoft Office Interop**:...

    Asp.Net,C#创建Excel,动态给下拉框赋值

    在Asp.Net和C#开发环境中,创建Excel文件并实现动态下拉框赋值是一项常见的需求,这通常涉及到数据处理、界面设计以及与Excel交互的技术。以下是对这一知识点的详细说明: 首先,我们需要理解Asp.Net和C#的基础。...

    ASP.NET 分Sheet导出EXCEL 2003 导出引用dll

    在ASP.NET开发中,有时我们需要将大量的数据导出到Excel文件中,以便用户可以方便地进行数据管理和分析。特别是当数据量大到一个工作表无法容纳时,分Sheet导出就显得尤为重要。本文将深入探讨如何在ASP.NET环境中...

    asp.net,数据库导入excel数据,C#语言

    在ASP.NET开发中,有时我们需要将Excel数据导入到SQL Server数据库中,这通常涉及到C#编程语言的使用。本文将详细讲解如何通过C#实现这一功能,并在ASP.NET环境中搭建一个用户界面,允许用户上传Excel文件并将其内容...

    asp.net 导出excel demo

    在这个"asp.net 导出excel demo"中,MyNPOI可能就是NPOI的一个示例项目或者封装库,用于简化操作。 下面将详细介绍利用NPOI在ASP.NET中导出Excel的关键步骤: 1. **安装NPOI**: 首先,你需要在你的ASP.NET项目中...

Global site tag (gtag.js) - Google Analytics