Microsoft.Office.Interop.Excel命名空间要添加什么引用

首先:Microsoft.Office.Interop.Excel命名空间要添加什么引用

//这一步我自己做了,但是还是不好使,好使是在更新excel的对.net支持后好的就是下面的图形说明

在visual Studio 2005命令提示工具中,定位到Excel安装目录,运行“TlbImp EXCEL.EXE”命令,把Excel.exe编译为Excel.dll。这一步会在你的机器上面的安装Office的目录下面的 Office11(office2003)目录下生成Excell.dll,所以在引用的时候要到这个目录下面来找Excel.dll。

在项目的引用节点单击右键,在弹出的菜单中单击添加引用...在弹出的对话框中单击COM项,找到Microsoft Excel 11.0 Object Library并单击选中,然后单击选择按钮,如图“引用Excel2003”。从中我们可以看出是引用的Excel.Exe文件,这是 Excel2003版。Excel2000及Excel2002即Excel XP COM项见“Excel版本对照表”。

打开Visual Studio .Net2003命令提示,运行 TlbImp Excel.EXE Interop.Excel.dll

如果是Excel2000,则 TlbImp Excel9.olb Interop.Excel.dll

当 然,第一参数Excel.EXE(Excel9.olb)要指定目录(Office2000安装目录),如果不指定,需要把它拷贝到VS.Net安装路径 下如C:/Visual Studio.Net/SDK/v1.1/Bin;同理,第二参数Interop.Excel.dll是生成的对应的动态库,如果不指定目录,默认生成在 VS.Net安装路径BIN下 ,你可以用你自己喜欢的名字取Interop.Excel.dll,生成之后你就可以在VS.Net开发环境项目中添加对它的引用了。

Tlbimp.exe为类型库导入程序,它将 COM 类型库中的类型定义转换为公共语言运行库程序集中的等效定义,关于它的详细使用参见MSDN。

用第一种方法和第二种方法引用的库和默认文件目录为分别如下:

Excel 2000是

Microsoft Excel 9.0 Object Library

C:/Program Files/Microsoft Office/Office/EXCEL9.OLB

Excel 2002(XP)是

Microsoft Excel 10.0 Object Library

C:/Program Files/Microsoft Office/OFFICE10/EXCEL.EXE

Excel 2003是

Microsoft Excel 11.0 Object Library

C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE

文件/版本

Interop.Excel.dll

Interop.Office.dll

Interop.VBIDE.dll

添加引用/COM组件

2000

V1.3.0.0

V2.1.0.0

V5.3.0.0

Microsoft Excel 9.0 Object Library(EXCEL9.OLB)

2002(XP)

V1.4.0.0

V2.2.0.0

V5.3.0.0

Microsoft Excel 10.0 Object Library(Excel.EXE文件)

2003

V1.5.0.0

V2.3.0.0

V5.3.0.0

Microsoft Excel 11.0 Object Library(Excel.EXE文件)

C#操作Excel:不存在类型或命名空间名称“Interop”

在实际开发过程中,我们经常会对Excel表进行操作。相信大家都都已经很熟悉C#操作Excel的步骤:添加引用->COM->Microsoft Office Excel 11 Object。

但是,最近我按照上述步骤添加完引用后,出现了·命名空间“Microsoft.Office” 中不存在类型或命名空间名称“Interop”(是缺少程序集引用吗?)·的错误,查也很多资料,都没有解决,给开发过程造成了障碍。

问题原因

导致这个问题的原因是安装Office时没有安装“.Net可编程性支持”组件。

解决方法

1、打开控制面板,更改Office的安装,选中下图中的红色方框内:选择应用程序的高级定义;

2、下一步之后,按照下图选中安装选项中的“.Net可编程性支持”项,一路“下上步”至安装完毕;

3、重新添加引用。

OK!问题解决!

c# datagridview 导出excel 收藏
准备工作就是可以分页的DataGridView,和两个按钮,一个用来导出当前页数据到Excel,一个用来导出全部数据到Excel

没有使用SaveFileDialog,但却可以弹出保存对话框来

先做导出当前页数据到Excel的

DataGridView命名为dataGridView1

C#代码
#region 导出当前页到Excel中

//按下导出按钮

private void button7_Click(object sender, EventArgs e)

{

print(dataGridView1);

}

public void print(DataGridView dataGridView1)

{

//导出到execl

try

{

//没有数据的话就不往下执行

if (dataGridView1.Rows.Count == 0)

return;

//实例化一个Excel.Application对象

Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写

excel.Visible = false;

//新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错

excel.Application.Workbooks.Add(true);

//生成Excel中列头名称

for (int i = 0; i < dataGridView1.Columns.Count; i++)

{

excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;

}

//把DataGridView当前页的数据保存在Excel中

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)

{

for (int j = 0; j < dataGridView1.Columns.Count; j++)

{

if (dataGridView1[j, i].ValueType == typeof(string))

{

excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();

}

else

{

excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();

}

}

}

//设置禁止弹出保存和覆盖的询问提示框

excel.DisplayAlerts = false;

excel.AlertBeforeOverwriting = false;

//保存工作簿

excel.Application.Workbooks.Add(true).Save();

//保存excel文件

excel.Save("D:" + "//KKHMD.xls");

//确保Excel进程关闭

excel.Quit();

excel = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "错误提示");

}

}

#endregion

public void printAll(System.Data.DataTable dt)

{

//导出到execl

try

{

//没有数据的话就不往下执行

if (dt.Rows.Count == 0)

return;

//实例化一个Excel.Application对象

Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Applicatio();

//新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错

excel.Application.Workbooks.Add(true);

//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写

excel.Visible = false;

//生成Excel中列头名称

for (int i = 0; i < dt.Columns.Count; i++)

{

excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;//输出DataGridView列头名

}

//把DataGridView当前页的数据保存在Excel中

if (dt.Rows.Count > 0)

{

for (int i = 0; i < dt.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完

{

for (int j = 0; j < dt.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完

{

string str = dt.Rows[i][j].ToString();

excel.Cells[i + 2, j + 1] = "'" + str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制

}

}

}

//设置禁止弹出保存和覆盖的询问提示框

excel.DisplayAlerts = false;

excel.AlertBeforeOverwriting = false;

//保存工作簿,值为false会报错

excel.Application.Workbooks.Add(true).Save();

//保存excel文件

excel.Save("D:" + "//KKHMD.xls");

//确保Excel进程关闭

excel.Quit();

excel = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "错误提示");

}

}

private void button1_Click(object sender, EventArgs e)

{

printAll(dt);

}

#endregion

这不是最好的版本,无论是功能上还是效率上,至少没用SaveFileDialog的话,控制不到取消保存按钮,一旦点击了取消保存,则软件重起之前一直都不能再使用导出功能,只能是手动杀掉进程中的Excel.exe,进程中的Excel.exe也是没有在程序里进行关闭的,所以是使用一次导出功能,就会在进程中多生成一次Excel.exe

彻底关闭excel进程的方法

using System.Diagnostics;

private void KillProcess(string processName)
        {
            //获得进程对象,以用来操作  
            System.Diagnostics.Process myproc = new System.Diagnostics.Process();
            //得到所有打开的进程   
            try
            {
                //获得需要杀死的进程名  
                foreach (Process thisproc in Process.GetProcessesByName(processName))
                {
                    //立即杀死进程  
                    thisproc.Kill();
                }
            }
            catch (Exception Exc)
            {
                throw new Exception("", Exc);
            }
        }

方法一:添加dll引用

右击选择你所在的项目的“引用”,选择“添加引用”。

弹出“添加引用”对话框。

选择“COM”选项卡。

选择“Microsoft Excel 11.0 Object Library”

单击“确定”按钮。

代码

public static bool ExportForDataGridview(DataGridView gridView, string fileName, bool isShowExcle)
        {

//建立Excel对象

Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            try
            {
                if (app == null)
                {
                    return false;
                }
               
                app.Visible = isShowExcle;
                Workbooks workbooks = app.Workbooks;
                _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                Sheets sheets = workbook.Worksheets;
                _Worksheet worksheet = (_Worksheet)sheets.get_Item(1);
                if (worksheet == null)
                {
                    return false;
                }
                string sLen = "";
                //取得最后一列列名
                char H = (char)(64 + gridView.ColumnCount / 26);
                char L = (char)(64 + gridView.ColumnCount % 26);
                if (gridView.ColumnCount < 26)
                {
                    sLen = L.ToString();
                }
                else
                {
                    sLen = H.ToString() + L.ToString();
                }

//标题
                string sTmp = sLen + "1";
                Range ranCaption = worksheet.get_Range(sTmp, "A1");
                string[] asCaption = new string[gridView.ColumnCount];
                for (int i = 0; i < gridView.ColumnCount; i++)
                {
                    asCaption[i] = gridView.Columns[i].HeaderText;
                }
                ranCaption.Value2 = asCaption;

//数据
                object[] obj = new object[gridView.Columns.Count];
                for (int r = 0; r < gridView.RowCount - 1; r++)
                {
                    for (int l = 0; l < gridView.Columns.Count; l++)
                    {
                        if (gridView[l, r].ValueType == typeof(DateTime))
                        {
                            obj[l] = gridView[l, r].Value.ToString();
                        }
                        else
                        {
                            obj[l] = gridView[l, r].Value;
                        }
                    }
                    string cell1 = sLen + ((int)(r + 2)).ToString();
                    string cell2 = "A" + ((int)(r + 2)).ToString();
                    Range ran = worksheet.get_Range(cell1, cell2);
                    ran.Value2 = obj;
                }
                //保存
                workbook.SaveCopyAs(fileName);
                workbook.Saved = true;
            }
            finally
            {
                //关闭
                app.UserControl = false;
                app.Quit();
            }
            return true;

}

方法二

用流保存成xls文件. 这种方法比较好,不用引用Excel组件.   下面是具体例子,可以参考

using System.IO;

/// <summary>

/// 另存新档按钮

/// </summary>

private void SaveAs() //另存新档按钮   导出成Excel

{

SaveFileDialog saveFileDialog = new SaveFileDialog();

saveFileDialog.Filter = "Execl files (*.xls)|*.xls";

saveFileDialog.FilterIndex = 0;

saveFileDialog.RestoreDirectory = true;

saveFileDialog.CreatePrompt = true;

saveFileDialog.Title = "Export Excel File To";

saveFileDialog.ShowDialog();

Stream myStream;

myStream = saveFileDialog.OpenFile();

//StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));

StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));

string str = "";

try

{

//写标题

for (int i = 0; i < dgvAgeWeekSex.ColumnCount; i++)

{

if (i > 0)

{

str += "/t";

}

str += dgvAgeWeekSex.Columns[i].HeaderText;

}

sw.WriteLine(str);

//写内容

for (int j = 0; j < dgvAgeWeekSex.Rows.Count; j++)

{

string tempStr = "";

for (int k = 0; k < dgvAgeWeekSex.Columns.Count; k++)

{

if (k > 0)

{

tempStr += "/t";

}

tempStr += dgvAgeWeekSex.Rows[j].Cells[k].Value.ToString();

}

sw.WriteLine(tempStr);

}

sw.Close();

myStream.Close();

}

catch (Exception e)

{

MessageBox.Show(e.ToString());

}

finally

{

sw.Close();

myStream.Close();

}

}

[转]将c#中datagridview中的数据导出到excel中相关推荐

  1. datagridview序号左对齐_winform DataGridView数据导出到excel中

    winform DataGridView数据导出到excel中 实例一 private void button5_Click_1(object sender, EventArgs e) { //建立E ...

  2. python处理大量excel数据-使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...

  3. python输出数据到excel-使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...

  4. python输出数据到excel-如何使用python将大量数据导出到Excel中的小技巧之一

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  5. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  6. python数据导出excel_【python Excel】如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  7. 如何将python数据输入到excel中_如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  8. python获取excel整行数据如何保存到新的工作簿中_如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  9. python导出百万数据到excel_使用python将大量数据导出到Excel中的小技巧分享

    使用python将大量数据导出到Excel中的小技巧分享 今天小编就为大家分享一篇使用python将大量数据导出到Excel中的小技巧心得,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看 ...

  10. matlab数据导出excel,matlab数据点导出excel表格-怎样将matlab中数据导出到excel中?...

    怎样将matlab中数据导出到excel中? xlswrite('E:系数.xls',B,'','A2') E:系数.xls 是路径 B是需要导入的矩阵 A2是指矩阵从表格中的A2开始输入 希望可以帮 ...

最新文章

  1. 【前端】20款国外非常漂亮的优秀网站404错误页面HTML模板
  2. iOS - OC NSPoint 位置
  3. java上机练习01
  4. 简单的一阶低通滤波器
  5. php调用以太坊geth API说明
  6. empire-web可视化
  7. 图神经网络概述:Graph Neural Networks
  8. 互联网时代的十大特征和趋势
  9. C#坏习惯:通过不好的例子学习如何制作好的代码——第5部分
  10. 从0开始搭建基于Zookeeper的Spark集群
  11. HDU3549+Ford-Fulkerson
  12. matlab读取i o数据文件,Matlab 的数据文件读取
  13. xshell报initialize flexnet service failed error code 50003错误
  14. Git问题Everything up-to-date正确解决方法
  15. java jsp 获得网页源代码三种方式
  16. 浙大PAT考试1013~1016(最伤的一次。。)
  17. BZOJ3238 后缀自动机+推公式
  18. 第一台计算机如何工作原理,世界上第一台计算机是什么原理_世界上第一台计算机...
  19. java写家书_致诸弟·述求学之方法(曾国藩家书)
  20. 为什么网络是一把双刃剑?我们应该如何正确使用?

热门文章

  1. 【转载】使用 Google Guava 美化你的 Java 代码
  2. 多种负载均衡算法及其Java代码实现
  3. 关于利用exchange server 2003搭建邮件服务器:小进步……
  4. Postfix上的反垃圾邮件的四个方法
  5. FORTRAN里的SCALE函数
  6. 在Tomcat中部署web项目的三种方式
  7. brew 安装软件能指定文件夹吗_Mac安装homebrew安装到指定目录
  8. java子字符串个数组_javasript 字符串 数组操作
  9. SSM返回中文乱码问题,SpringMVC返回中文乱码,SSM返回String字符串乱码问题
  10. 信贷违约风险评估模型(上篇):探索性数据分析