C#
在程序中我只做一个按扭.用途是:
如果指定的的excel文件中的数据有变动(如c:\count.xsl),我只要在本程序按扭上点击保存,那么就能保存改动的内容?而不使用excel自带的"文件\保存"方式.这个可以实现吗?高人指点,解决了给100分再次说明,excel中的数据不是这个程序本身改动的,而是打开excel表格后手动修改的.我只是想用自己做的安扭来保存它.也不是"另存为",是直接保存在原excel里面.

解决方案 »

  1.   

    用程序?好像是不可以吧.除非你在程序里面改,再保存.你直接改excel又要用程序按钮来保存,怎么感觉像脱下裤子来放屁呀,呵呵.
      

  2.   

    Excel 文件是有你的程序打开的还是由别人打开的?
    要是你自己的程序打开的,倒是很简单啊
      

  3.   

    声明 一个Excel.ApplicationClass ,使其指向你的要保存的Excel,然后调用它的保存方法
      

  4.   

    如果是自己打开的,可以用楼上的方法。这里给一个例子参考一下:
    http://dotnet.aspx.cc/article/13c874e4-7fc7-4fd1-8cf6-de9ef4469a9c/read.aspx
      

  5.   

    问题是你写的时候
    excel已经帮你保存了
    好像每几秒就自动保存一次
      

  6.   

    除非你读内存,应该不可能.
    因为Excel改动后是临时放在内存里的,你的程序可以读到Excel使用的内存部分不?
      

  7.   

    http://support.microsoft.com/kb/311452/zh-cn里面有很多东西,不只是对SAVE的操作,VBA能实现的C#都能实现。
      

  8.   

    http://support.microsoft.com/kb/306023/
    比如这篇是讲用C#向EXCEL传输数据的,其中就有一步SAVE操作.
      

  9.   

    有一点难. 我记得以前是这么解决的, 但是首先你要知道当前打开这个excel的进程ID.然后获取这个进程的句柄. C#里面调用这个进程的save 方法就是Excel.Application能启动的那个进程. 比较麻烦. 不过你的思路满有创意的, 一点用都没有的function.
      

  10.   

    如果是自己的程序打开的, 那你就在打开时遍历一下所有的单元格, 在保存时再遍历一下所有的单元格, 保存不一样的好了当然, 所有的单元格也并不是全部, 那样程序真累死了, 用一下Excel.WorkSheet.UsedRange限定一下使用的单元格范围, 不过万一真的有变态在IV65535单元格做个改动, 那就等死吧
      

  11.   

    1、获取Excel的进程
    2、给Excel SendKey Ctrl+S
    3、搞定
      

  12.   

    0 0
    咦 ...
    上面的好像还简单Process 获取Excel 把焦点给他 ..
    然后模拟 Ctrl + S
      

  13.   

    有意思的想法.....隔一个时间给Excel发个保存命令.
      

  14.   

    光有一个按钮恐怕不行,如果你打开很多个Excel,要保存其中一个的话,你只有依靠一个listbox来选中你要的那个Excel。这样估计就可以解决的。
      

  15.   

    可以实现,最好你的Excel文件也是用程序打开的。
    private void m_save()
    {
    private Excel.ApplicationClass ExcelApp;
    private Excel.Workbook Workbook;
    private Excel.Worksheet Worksheet;ExcelApp = new Excel.ApplicationClass();//打开指定文件
    Workbook = ExcelApp.Workbooks.Open(path,
    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);//保存
    Workbook.Save();}
    若是手动打开文件,程序就可能不能再次打开文件了。
    你试试。
      

  16.   

    其实我想这样的,通过程序向excel插入数据,然后通过excel的公式自动计算功能,将插入的数据通过一定的公式来计算出结果,然后在通过程序读取其结果保存到sql2000数据库中!所有的问题都可以解决,包括你打开excel后都能看到计算出的结果,但是这个结果只是计算了,并没有保存(因为读取到的结果不是看到的结果,而是上次最后一次保存的结果,所以我想能不能通过程序来保存数据.
      

  17.   

    忘记了一句,在整个操作过程中,都不要打开excel.只是想借用一下excel的计算功能
      

  18.   

    其实真正懂程序的人才知道,这个并不仅仅只是一个保存的问题.
    首先让我们来模拟一下.下面是我们具备的东西:
    a.exe      //你自己写的程序
    Excel.exe  //微软办公软件
    test.xls   //测试用的excel表格文件第一步:用a.exe打开test.xls;
    第二步:用Excel.exe打开test.xls;
    第三步:在Excel.exe中对test.xls进行修改操作;
    第四步:在a.exe中对test.xls进行保存操作,并且能保存Excel.exe对test.xls的修改结果!好了,你认为这可以实现吗?a.exe和Excel.exe是两个独立的程序,如果a.exe不能读取Excel.exe的内存,那么a.exe是怎么知道Excel.exe对test.xls作了哪些修改呢?如果还不能弄明白,那么这里倒有一个很简单的例子:
    第一步:新建一个文件文件test.txt
    第二步:用记事本打开test.txt
    第三步:用Word打开test.txt
    第四步:在记事本中修改test.txt(比如写几个字进去)
    第五步: 在Word中点击保存按纽朋友,你认为test.txt的内容会被改变吗?
      

  19.   

    忘记了一句,在整个操作过程中,都不要打开excel.只是想借用一下excel的计算功能
    ===========================你的想法倒是很有"旁门左道"的味道,嘿嘿.
    只是什么算法在C#中实现不了,非要用Excel呢?
    虽然直接用Excel的算法或许是会简单点,但付出的代价太大了,
    所以建设你这条"左道"还是别走了,在C#中多写几行代码问题总能解决的.
      

  20.   

    To:Boxter110:
    如何 “给Excel SendKey Ctrl+S”?
      

  21.   

    TO:zjmotion(旁门左道) 
    讲的很有道理不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
      

  22.   

    1。不是不能做到的,ms有种叫codemaker技术,不过好像不外传,他本来就作在office里面,有什么消息会发出来。不过当时没有研究过,因为觉得更本自己用不到。
      

  23.   

    我们当时做.net 2007测试,也是外部程序获得.net的准备信息,不过类库上层已经给我们做好了,下层就是codeer。
      

  24.   

    不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
    ==============
    你要使用Excel的算法,你就必须打开Excel表.
    对Excel表的数据进行计算是Office办公软件来完成的,并不是因为它是一个xls文件就可以只向它插入一行数据它就能计算出结果.
    你可以用自己的程序对xls文件插入数据并保存.但你不用Excel去打开这个文件,它的计算事件就无法触发.
      

  25.   

    其实,关键在于能否实现像Excel一样可以让用户自己写公式.
    查查资料先~
      

  26.   

    要是这样的话,楼主应当采用从Excel读取公式,然后将公式转化成为c#中的算法,最后还是用C#来计算。Excel起到的只是一个图形化公式编辑器的作用。不知道我是否理解了楼主的意思!
      

  27.   

    to:litaoye()
    能不能在具体点,比如怎样从Excel读取公式?
      

  28.   

    to:litaoye()
    能不能在具体点,比如怎样从Excel读取公式?
    --------------------
    看来楼主有点病急乱投医了,呵呵.
    现在的难点不在于公式的编写,而是在于如何在C#执行自定义的公式.
    比如在程序界面放置一个文本框和一个按纽,在文本框里输入"2*5-6+4",那么点击按纽后能否让C#执行"2*5-6+4"得到最终结果8呢?
    如果能实现的话,何必还要先把公式写进Excel表,再从Excel表里读取公式再来计算?这不是绕弯子吗?
      

  29.   

    Excel 里写宏,,,,   在C#里调动
      

  30.   

    第一,能利用excel已有的强大的计算功能,
    第二,不必要用c#写复杂的公式就能计算.简化程序.
    第三,excel计算公式可以必要由编程人员来编写.用户自己在excel中就可以编写公式,然后保存在本地,作为模板,每要计算一次就可以调用一次模板.
      

  31.   

    楼主还是没明白问题出在哪里.
    现在的难点不是从excel获取公式,可是怎么样让C#执行获取的公式?
    这样说吧,假设你现在已经从excel表里获取到了这样一个公式:"1*987-54+56"
    那么,我想问你,这个公式对你有什么用?
    所以,问题的关键在于如何让C#认得"1*987-54+56"是一个公式并按逻辑关系计算出来.
      

  32.   

    c#中有一个监视硬盘中的文件是否发生改变!
    当excel变化后,保存!
      

  33.   

    读取公式需要先取到range比如:Microsoft.Office.Interop.Excel.Range range1 = xSheet.get_Range("B1", Type.Missing);range1.Formula
    range1.FormulaArray都是跟公式有关的。另外我试过了,当你用C#填写完了数值,并保存之后,是可以直接通过range的value2读取计算结果的,你所说的读不到,会不会跟顺序有关?一定要填写完所有数据之后再读。
      

  34.   

    给你一段简单的代码:Microsoft.Office.Interop.Excel.Application xApp = new ApplicationClass();
    Microsoft.Office.Interop.Excel.Workbook xBook = xApp.Workbooks._Open(@"c:\1.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);Microsoft.Office.Interop.Excel.Worksheet xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xBook.Sheets[1];Microsoft.Office.Interop.Excel.Range rng1 = xSheet.get_Range("B1", Type.Missing);
    Microsoft.Office.Interop.Excel.Range rng2 = xSheet.get_Range("A1", Type.Missing);rng2.Value2 = 10;
    xBook.Save();
    this.textBox1.Text = rng1.Value2.ToString();其中B1里面是一个公式,=SUM(A:A)
    当我替换了A1里面的值后,马上就能读取到B1值的变化。
      

  35.   

    to:zjmotion(旁门左道)c#能够计算Excel的公式(至少能算一部分),同样是调用Microsoft.Office.Interop.Excel,随便自定义一个Range,然后按照下面的方法就能计算。
    rng1.Formula = "=SUM(A:A)*100/80";
    rng1.Calculate();
    value = rng1.Value2.ToString();其中value就是计算后的结果。不保存xsl同样能得到计算结果,这样对本来的文件也没有改动。