C#
在程序中我只做一个按扭.用途是:
如果指定的的excel文件中的数据有变动(如c:\count.xsl),我只要在本程序按扭上点击保存,那么就能保存改动的内容?而不使用excel自带的"文件\保存"方式.这个可以实现吗?高人指点,解决了给100分再次说明,excel中的数据不是这个程序本身改动的,而是打开excel表格后手动修改的.我只是想用自己做的安扭来保存它.也不是"另存为",是直接保存在原excel里面.
在程序中我只做一个按扭.用途是:
如果指定的的excel文件中的数据有变动(如c:\count.xsl),我只要在本程序按扭上点击保存,那么就能保存改动的内容?而不使用excel自带的"文件\保存"方式.这个可以实现吗?高人指点,解决了给100分再次说明,excel中的数据不是这个程序本身改动的,而是打开excel表格后手动修改的.我只是想用自己做的安扭来保存它.也不是"另存为",是直接保存在原excel里面.
要是你自己的程序打开的,倒是很简单啊
http://dotnet.aspx.cc/article/13c874e4-7fc7-4fd1-8cf6-de9ef4469a9c/read.aspx
excel已经帮你保存了
好像每几秒就自动保存一次
因为Excel改动后是临时放在内存里的,你的程序可以读到Excel使用的内存部分不?
比如这篇是讲用C#向EXCEL传输数据的,其中就有一步SAVE操作.
2、给Excel SendKey Ctrl+S
3、搞定
咦 ...
上面的好像还简单Process 获取Excel 把焦点给他 ..
然后模拟 Ctrl + S
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();}
若是手动打开文件,程序就可能不能再次打开文件了。
你试试。
首先让我们来模拟一下.下面是我们具备的东西:
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的内容会被改变吗?
===========================你的想法倒是很有"旁门左道"的味道,嘿嘿.
只是什么算法在C#中实现不了,非要用Excel呢?
虽然直接用Excel的算法或许是会简单点,但付出的代价太大了,
所以建设你这条"左道"还是别走了,在C#中多写几行代码问题总能解决的.
如何 “给Excel SendKey Ctrl+S”?
讲的很有道理不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
==============
你要使用Excel的算法,你就必须打开Excel表.
对Excel表的数据进行计算是Office办公软件来完成的,并不是因为它是一个xls文件就可以只向它插入一行数据它就能计算出结果.
你可以用自己的程序对xls文件插入数据并保存.但你不用Excel去打开这个文件,它的计算事件就无法触发.
查查资料先~
能不能在具体点,比如怎样从Excel读取公式?
能不能在具体点,比如怎样从Excel读取公式?
--------------------
看来楼主有点病急乱投医了,呵呵.
现在的难点不在于公式的编写,而是在于如何在C#执行自定义的公式.
比如在程序界面放置一个文本框和一个按纽,在文本框里输入"2*5-6+4",那么点击按纽后能否让C#执行"2*5-6+4"得到最终结果8呢?
如果能实现的话,何必还要先把公式写进Excel表,再从Excel表里读取公式再来计算?这不是绕弯子吗?
第二,不必要用c#写复杂的公式就能计算.简化程序.
第三,excel计算公式可以必要由编程人员来编写.用户自己在excel中就可以编写公式,然后保存在本地,作为模板,每要计算一次就可以调用一次模板.
现在的难点不是从excel获取公式,可是怎么样让C#执行获取的公式?
这样说吧,假设你现在已经从excel表里获取到了这样一个公式:"1*987-54+56"
那么,我想问你,这个公式对你有什么用?
所以,问题的关键在于如何让C#认得"1*987-54+56"是一个公式并按逻辑关系计算出来.
当excel变化后,保存!
range1.FormulaArray都是跟公式有关的。另外我试过了,当你用C#填写完了数值,并保存之后,是可以直接通过range的value2读取计算结果的,你所说的读不到,会不会跟顺序有关?一定要填写完所有数据之后再读。
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值的变化。
rng1.Formula = "=SUM(A:A)*100/80";
rng1.Calculate();
value = rng1.Value2.ToString();其中value就是计算后的结果。不保存xsl同样能得到计算结果,这样对本来的文件也没有改动。