在程序中我只做一个按扭.用途是:
如果指定的的excel文件中的数据有变动(如c:\count.xsl),我只要在本程序按扭上点击保存,那么就能保存改动的内容?而不使用excel自带的"文件\保存"方式.这个可以实现吗?高人指点,解决了给100分
再次说明,excel中的数据不是这个程序本身改动的,而是打开excel表格后手动修改的.我只是想用自己做的安扭来保存它.
也不是"另存为",是直接保存在原excel里面.
52 个解决方案
#1
用程序?好像是不可以吧.除非你在程序里面改,再保存.
你直接改excel又要用程序按钮来保存,怎么感觉像脱下裤子来放屁呀,呵呵.
你直接改excel又要用程序按钮来保存,怎么感觉像脱下裤子来放屁呀,呵呵.
#2
Excel 文件是有你的程序打开的还是由别人打开的?
要是你自己的程序打开的,倒是很简单啊
要是你自己的程序打开的,倒是很简单啊
#3
关注……
#4
自己的程序打开的怎么做?别的程序打开的又怎么做?
#5
声明 一个Excel.ApplicationClass ,使其指向你的要保存的Excel,然后调用它的保存方法
#6
如果是自己打开的,可以用楼上的方法。这里给一个例子参考一下:
http://dotnet.aspx.cc/article/13c874e4-7fc7-4fd1-8cf6-de9ef4469a9c/read.aspx
http://dotnet.aspx.cc/article/13c874e4-7fc7-4fd1-8cf6-de9ef4469a9c/read.aspx
#7
可以!
#8
问题是你写的时候
excel已经帮你保存了
好像每几秒就自动保存一次
excel已经帮你保存了
好像每几秒就自动保存一次
#9
这样子做有什么用处啊?
#10
除非你读内存,应该不可能.
因为Excel改动后是临时放在内存里的,你的程序可以读到Excel使用的内存部分不?
因为Excel改动后是临时放在内存里的,你的程序可以读到Excel使用的内存部分不?
#11
Excel.ApplicationClass 解决
#12
http://support.microsoft.com/kb/311452/zh-cn
里面有很多东西,不只是对SAVE的操作,VBA能实现的C#都能实现。
里面有很多东西,不只是对SAVE的操作,VBA能实现的C#都能实现。
#13
http://support.microsoft.com/kb/306023/
比如这篇是讲用C#向EXCEL传输数据的,其中就有一步SAVE操作.
比如这篇是讲用C#向EXCEL传输数据的,其中就有一步SAVE操作.
#14
有一点难. 我记得以前是这么解决的, 但是首先你要知道当前打开这个excel的进程ID.然后获取这个进程的句柄. C#里面调用这个进程的save 方法
就是Excel.Application能启动的那个进程. 比较麻烦. 不过你的思路满有创意的, 一点用都没有的function.
就是Excel.Application能启动的那个进程. 比较麻烦. 不过你的思路满有创意的, 一点用都没有的function.
#15
如果是自己的程序打开的, 那你就在打开时遍历一下所有的单元格, 在保存时再遍历一下所有的单元格, 保存不一样的好了
当然, 所有的单元格也并不是全部, 那样程序真累死了, 用一下Excel.WorkSheet.UsedRange限定一下使用的单元格范围, 不过万一真的有变态在IV65535单元格做个改动, 那就等死吧
当然, 所有的单元格也并不是全部, 那样程序真累死了, 用一下Excel.WorkSheet.UsedRange限定一下使用的单元格范围, 不过万一真的有变态在IV65535单元格做个改动, 那就等死吧
#16
1、获取Excel的进程
2、给Excel SendKey Ctrl+S
3、搞定
2、给Excel SendKey Ctrl+S
3、搞定
#17
进程之间的通讯,难
#18
0 0
咦 ...
上面的好像还简单
Process 获取Excel 把焦点给他 ..
然后模拟 Ctrl + S
咦 ...
上面的好像还简单
Process 获取Excel 把焦点给他 ..
然后模拟 Ctrl + S
#19
有意思的想法.....
隔一个时间给Excel发个保存命令.
隔一个时间给Excel发个保存命令.
#20
up
#21
帮顶,学习
#22
光有一个按钮恐怕不行,如果你打开很多个Excel,要保存其中一个的话,你只有依靠一个listbox来选中你要的那个Excel。这样估计就可以解决的。
#23
mark~
#24
可以实现,最好你的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();
}
若是手动打开文件,程序就可能不能再次打开文件了。
你试试。
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();
}
若是手动打开文件,程序就可能不能再次打开文件了。
你试试。
#25
其实我想这样的,通过程序向excel插入数据,然后通过excel的公式自动计算功能,将插入的数据通过一定的公式来计算出结果,然后在通过程序读取其结果保存到sql2000数据库中!所有的问题都可以解决,包括你打开excel后都能看到计算出的结果,但是这个结果只是计算了,并没有保存(因为读取到的结果不是看到的结果,而是上次最后一次保存的结果,所以我想能不能通过程序来保存数据.
#26
忘记了一句,在整个操作过程中,都不要打开excel.只是想借用一下excel的计算功能
#27
有没人能解决啊?
#28
其实真正懂程序的人才知道,这个并不仅仅只是一个保存的问题.
首先让我们来模拟一下.下面是我们具备的东西:
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的内容会被改变吗?
首先让我们来模拟一下.下面是我们具备的东西:
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的内容会被改变吗?
#29
忘记了一句,在整个操作过程中,都不要打开excel.只是想借用一下excel的计算功能
===========================
你的想法倒是很有"旁门左道"的味道,嘿嘿.
只是什么算法在C#中实现不了,非要用Excel呢?
虽然直接用Excel的算法或许是会简单点,但付出的代价太大了,
所以建设你这条"左道"还是别走了,在C#中多写几行代码问题总能解决的.
===========================
你的想法倒是很有"旁门左道"的味道,嘿嘿.
只是什么算法在C#中实现不了,非要用Excel呢?
虽然直接用Excel的算法或许是会简单点,但付出的代价太大了,
所以建设你这条"左道"还是别走了,在C#中多写几行代码问题总能解决的.
#30
To:Boxter110:
如何 “给Excel SendKey Ctrl+S”?
如何 “给Excel SendKey Ctrl+S”?
#31
TO:zjmotion(旁门左道)
讲的很有道理
不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
讲的很有道理
不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
#32
1。不是不能做到的,ms有种叫codemaker技术,不过好像不外传,他本来就作在office里面,有什么消息会发出来。不过当时没有研究过,因为觉得更本自己用不到。
#33
我们当时做.net 2007测试,也是外部程序获得.net的准备信息,不过类库上层已经给我们做好了,下层就是codemarker。
#34
不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
==============
你要使用Excel的算法,你就必须打开Excel表.
对Excel表的数据进行计算是Office办公软件来完成的,并不是因为它是一个xls文件就可以只向它插入一行数据它就能计算出结果.
你可以用自己的程序对xls文件插入数据并保存.但你不用Excel去打开这个文件,它的计算事件就无法触发.
==============
你要使用Excel的算法,你就必须打开Excel表.
对Excel表的数据进行计算是Office办公软件来完成的,并不是因为它是一个xls文件就可以只向它插入一行数据它就能计算出结果.
你可以用自己的程序对xls文件插入数据并保存.但你不用Excel去打开这个文件,它的计算事件就无法触发.
#35
各位兄弟,那请问还有没有其他可行方法?
#36
关注
#37
各位兄弟,那请问还有没有其他可行方法?
#38
关注
#39
其实,关键在于能否实现像Excel一样可以让用户自己写公式.
查查资料先~
查查资料先~
#40
要是这样的话,楼主应当采用从Excel读取公式,然后将公式转化成为c#中的算法,最后还是用C#来计算。
Excel起到的只是一个图形化公式编辑器的作用。
不知道我是否理解了楼主的意思!
Excel起到的只是一个图形化公式编辑器的作用。
不知道我是否理解了楼主的意思!
#41
to:litaoye()
能不能在具体点,比如怎样从Excel读取公式?
能不能在具体点,比如怎样从Excel读取公式?
#42
to:litaoye()
能不能在具体点,比如怎样从Excel读取公式?
--------------------
看来楼主有点病急乱投医了,呵呵.
现在的难点不在于公式的编写,而是在于如何在C#执行自定义的公式.
比如在程序界面放置一个文本框和一个按纽,在文本框里输入"2*5-6+4",那么点击按纽后能否让C#执行"2*5-6+4"得到最终结果8呢?
如果能实现的话,何必还要先把公式写进Excel表,再从Excel表里读取公式再来计算?这不是绕弯子吗?
能不能在具体点,比如怎样从Excel读取公式?
--------------------
看来楼主有点病急乱投医了,呵呵.
现在的难点不在于公式的编写,而是在于如何在C#执行自定义的公式.
比如在程序界面放置一个文本框和一个按纽,在文本框里输入"2*5-6+4",那么点击按纽后能否让C#执行"2*5-6+4"得到最终结果8呢?
如果能实现的话,何必还要先把公式写进Excel表,再从Excel表里读取公式再来计算?这不是绕弯子吗?
#43
Excel 里写宏,,,, 在C#里调动
#44
支持+up
#45
第一,能利用excel已有的强大的计算功能,
第二,不必要用c#写复杂的公式就能计算.简化程序.
第三,excel计算公式可以必要由编程人员来编写.用户自己在excel中就可以编写公式,然后保存在本地,作为模板,每要计算一次就可以调用一次模板.
第二,不必要用c#写复杂的公式就能计算.简化程序.
第三,excel计算公式可以必要由编程人员来编写.用户自己在excel中就可以编写公式,然后保存在本地,作为模板,每要计算一次就可以调用一次模板.
#46
楼主还是没明白问题出在哪里.
现在的难点不是从excel获取公式,可是怎么样让C#执行获取的公式?
这样说吧,假设你现在已经从excel表里获取到了这样一个公式:"1*987-54+56"
那么,我想问你,这个公式对你有什么用?
所以,问题的关键在于如何让C#认得"1*987-54+56"是一个公式并按逻辑关系计算出来.
现在的难点不是从excel获取公式,可是怎么样让C#执行获取的公式?
这样说吧,假设你现在已经从excel表里获取到了这样一个公式:"1*987-54+56"
那么,我想问你,这个公式对你有什么用?
所以,问题的关键在于如何让C#认得"1*987-54+56"是一个公式并按逻辑关系计算出来.
#47
c#中有一个监视硬盘中的文件是否发生改变!
当excel变化后,保存!
当excel变化后,保存!
#48
读取公式需要先取到range
比如:
Microsoft.Office.Interop.Excel.Range range1 = xSheet.get_Range("B1", Type.Missing);
range1.Formula
range1.FormulaArray
都是跟公式有关的。
另外我试过了,当你用C#填写完了数值,并保存之后,是可以直接通过range的value2读取计算结果的,你所说的读不到,会不会跟顺序有关?一定要填写完所有数据之后再读。
比如:
Microsoft.Office.Interop.Excel.Range range1 = xSheet.get_Range("B1", Type.Missing);
range1.Formula
range1.FormulaArray
都是跟公式有关的。
另外我试过了,当你用C#填写完了数值,并保存之后,是可以直接通过range的value2读取计算结果的,你所说的读不到,会不会跟顺序有关?一定要填写完所有数据之后再读。
#49
给你一段简单的代码:
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值的变化。
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值的变化。
#50
to:zjmotion(旁门左道)
c#能够计算Excel的公式(至少能算一部分),同样是调用Microsoft.Office.Interop.Excel,随便自定义一个Range,然后按照下面的方法就能计算。
rng1.Formula = "=SUM(A:A)*100/80";
rng1.Calculate();
value = rng1.Value2.ToString();
其中value就是计算后的结果。不保存xsl同样能得到计算结果,这样对本来的文件也没有改动。
c#能够计算Excel的公式(至少能算一部分),同样是调用Microsoft.Office.Interop.Excel,随便自定义一个Range,然后按照下面的方法就能计算。
rng1.Formula = "=SUM(A:A)*100/80";
rng1.Calculate();
value = rng1.Value2.ToString();
其中value就是计算后的结果。不保存xsl同样能得到计算结果,这样对本来的文件也没有改动。
#1
用程序?好像是不可以吧.除非你在程序里面改,再保存.
你直接改excel又要用程序按钮来保存,怎么感觉像脱下裤子来放屁呀,呵呵.
你直接改excel又要用程序按钮来保存,怎么感觉像脱下裤子来放屁呀,呵呵.
#2
Excel 文件是有你的程序打开的还是由别人打开的?
要是你自己的程序打开的,倒是很简单啊
要是你自己的程序打开的,倒是很简单啊
#3
关注……
#4
自己的程序打开的怎么做?别的程序打开的又怎么做?
#5
声明 一个Excel.ApplicationClass ,使其指向你的要保存的Excel,然后调用它的保存方法
#6
如果是自己打开的,可以用楼上的方法。这里给一个例子参考一下:
http://dotnet.aspx.cc/article/13c874e4-7fc7-4fd1-8cf6-de9ef4469a9c/read.aspx
http://dotnet.aspx.cc/article/13c874e4-7fc7-4fd1-8cf6-de9ef4469a9c/read.aspx
#7
可以!
#8
问题是你写的时候
excel已经帮你保存了
好像每几秒就自动保存一次
excel已经帮你保存了
好像每几秒就自动保存一次
#9
这样子做有什么用处啊?
#10
除非你读内存,应该不可能.
因为Excel改动后是临时放在内存里的,你的程序可以读到Excel使用的内存部分不?
因为Excel改动后是临时放在内存里的,你的程序可以读到Excel使用的内存部分不?
#11
Excel.ApplicationClass 解决
#12
http://support.microsoft.com/kb/311452/zh-cn
里面有很多东西,不只是对SAVE的操作,VBA能实现的C#都能实现。
里面有很多东西,不只是对SAVE的操作,VBA能实现的C#都能实现。
#13
http://support.microsoft.com/kb/306023/
比如这篇是讲用C#向EXCEL传输数据的,其中就有一步SAVE操作.
比如这篇是讲用C#向EXCEL传输数据的,其中就有一步SAVE操作.
#14
有一点难. 我记得以前是这么解决的, 但是首先你要知道当前打开这个excel的进程ID.然后获取这个进程的句柄. C#里面调用这个进程的save 方法
就是Excel.Application能启动的那个进程. 比较麻烦. 不过你的思路满有创意的, 一点用都没有的function.
就是Excel.Application能启动的那个进程. 比较麻烦. 不过你的思路满有创意的, 一点用都没有的function.
#15
如果是自己的程序打开的, 那你就在打开时遍历一下所有的单元格, 在保存时再遍历一下所有的单元格, 保存不一样的好了
当然, 所有的单元格也并不是全部, 那样程序真累死了, 用一下Excel.WorkSheet.UsedRange限定一下使用的单元格范围, 不过万一真的有变态在IV65535单元格做个改动, 那就等死吧
当然, 所有的单元格也并不是全部, 那样程序真累死了, 用一下Excel.WorkSheet.UsedRange限定一下使用的单元格范围, 不过万一真的有变态在IV65535单元格做个改动, 那就等死吧
#16
1、获取Excel的进程
2、给Excel SendKey Ctrl+S
3、搞定
2、给Excel SendKey Ctrl+S
3、搞定
#17
进程之间的通讯,难
#18
0 0
咦 ...
上面的好像还简单
Process 获取Excel 把焦点给他 ..
然后模拟 Ctrl + S
咦 ...
上面的好像还简单
Process 获取Excel 把焦点给他 ..
然后模拟 Ctrl + S
#19
有意思的想法.....
隔一个时间给Excel发个保存命令.
隔一个时间给Excel发个保存命令.
#20
up
#21
帮顶,学习
#22
光有一个按钮恐怕不行,如果你打开很多个Excel,要保存其中一个的话,你只有依靠一个listbox来选中你要的那个Excel。这样估计就可以解决的。
#23
mark~
#24
可以实现,最好你的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();
}
若是手动打开文件,程序就可能不能再次打开文件了。
你试试。
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();
}
若是手动打开文件,程序就可能不能再次打开文件了。
你试试。
#25
其实我想这样的,通过程序向excel插入数据,然后通过excel的公式自动计算功能,将插入的数据通过一定的公式来计算出结果,然后在通过程序读取其结果保存到sql2000数据库中!所有的问题都可以解决,包括你打开excel后都能看到计算出的结果,但是这个结果只是计算了,并没有保存(因为读取到的结果不是看到的结果,而是上次最后一次保存的结果,所以我想能不能通过程序来保存数据.
#26
忘记了一句,在整个操作过程中,都不要打开excel.只是想借用一下excel的计算功能
#27
有没人能解决啊?
#28
其实真正懂程序的人才知道,这个并不仅仅只是一个保存的问题.
首先让我们来模拟一下.下面是我们具备的东西:
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的内容会被改变吗?
首先让我们来模拟一下.下面是我们具备的东西:
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的内容会被改变吗?
#29
忘记了一句,在整个操作过程中,都不要打开excel.只是想借用一下excel的计算功能
===========================
你的想法倒是很有"旁门左道"的味道,嘿嘿.
只是什么算法在C#中实现不了,非要用Excel呢?
虽然直接用Excel的算法或许是会简单点,但付出的代价太大了,
所以建设你这条"左道"还是别走了,在C#中多写几行代码问题总能解决的.
===========================
你的想法倒是很有"旁门左道"的味道,嘿嘿.
只是什么算法在C#中实现不了,非要用Excel呢?
虽然直接用Excel的算法或许是会简单点,但付出的代价太大了,
所以建设你这条"左道"还是别走了,在C#中多写几行代码问题总能解决的.
#30
To:Boxter110:
如何 “给Excel SendKey Ctrl+S”?
如何 “给Excel SendKey Ctrl+S”?
#31
TO:zjmotion(旁门左道)
讲的很有道理
不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
讲的很有道理
不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
#32
1。不是不能做到的,ms有种叫codemaker技术,不过好像不外传,他本来就作在office里面,有什么消息会发出来。不过当时没有研究过,因为觉得更本自己用不到。
#33
我们当时做.net 2007测试,也是外部程序获得.net的准备信息,不过类库上层已经给我们做好了,下层就是codemarker。
#34
不过,程序的难点就是这些算法是经常变动的,算法每变动一次就只需要替换excel就可以了,这样就不去修改程序了.而且这些计算公式只需要使用人员拟订就可以了
==============
你要使用Excel的算法,你就必须打开Excel表.
对Excel表的数据进行计算是Office办公软件来完成的,并不是因为它是一个xls文件就可以只向它插入一行数据它就能计算出结果.
你可以用自己的程序对xls文件插入数据并保存.但你不用Excel去打开这个文件,它的计算事件就无法触发.
==============
你要使用Excel的算法,你就必须打开Excel表.
对Excel表的数据进行计算是Office办公软件来完成的,并不是因为它是一个xls文件就可以只向它插入一行数据它就能计算出结果.
你可以用自己的程序对xls文件插入数据并保存.但你不用Excel去打开这个文件,它的计算事件就无法触发.
#35
各位兄弟,那请问还有没有其他可行方法?
#36
关注
#37
各位兄弟,那请问还有没有其他可行方法?
#38
关注
#39
其实,关键在于能否实现像Excel一样可以让用户自己写公式.
查查资料先~
查查资料先~
#40
要是这样的话,楼主应当采用从Excel读取公式,然后将公式转化成为c#中的算法,最后还是用C#来计算。
Excel起到的只是一个图形化公式编辑器的作用。
不知道我是否理解了楼主的意思!
Excel起到的只是一个图形化公式编辑器的作用。
不知道我是否理解了楼主的意思!
#41
to:litaoye()
能不能在具体点,比如怎样从Excel读取公式?
能不能在具体点,比如怎样从Excel读取公式?
#42
to:litaoye()
能不能在具体点,比如怎样从Excel读取公式?
--------------------
看来楼主有点病急乱投医了,呵呵.
现在的难点不在于公式的编写,而是在于如何在C#执行自定义的公式.
比如在程序界面放置一个文本框和一个按纽,在文本框里输入"2*5-6+4",那么点击按纽后能否让C#执行"2*5-6+4"得到最终结果8呢?
如果能实现的话,何必还要先把公式写进Excel表,再从Excel表里读取公式再来计算?这不是绕弯子吗?
能不能在具体点,比如怎样从Excel读取公式?
--------------------
看来楼主有点病急乱投医了,呵呵.
现在的难点不在于公式的编写,而是在于如何在C#执行自定义的公式.
比如在程序界面放置一个文本框和一个按纽,在文本框里输入"2*5-6+4",那么点击按纽后能否让C#执行"2*5-6+4"得到最终结果8呢?
如果能实现的话,何必还要先把公式写进Excel表,再从Excel表里读取公式再来计算?这不是绕弯子吗?
#43
Excel 里写宏,,,, 在C#里调动
#44
支持+up
#45
第一,能利用excel已有的强大的计算功能,
第二,不必要用c#写复杂的公式就能计算.简化程序.
第三,excel计算公式可以必要由编程人员来编写.用户自己在excel中就可以编写公式,然后保存在本地,作为模板,每要计算一次就可以调用一次模板.
第二,不必要用c#写复杂的公式就能计算.简化程序.
第三,excel计算公式可以必要由编程人员来编写.用户自己在excel中就可以编写公式,然后保存在本地,作为模板,每要计算一次就可以调用一次模板.
#46
楼主还是没明白问题出在哪里.
现在的难点不是从excel获取公式,可是怎么样让C#执行获取的公式?
这样说吧,假设你现在已经从excel表里获取到了这样一个公式:"1*987-54+56"
那么,我想问你,这个公式对你有什么用?
所以,问题的关键在于如何让C#认得"1*987-54+56"是一个公式并按逻辑关系计算出来.
现在的难点不是从excel获取公式,可是怎么样让C#执行获取的公式?
这样说吧,假设你现在已经从excel表里获取到了这样一个公式:"1*987-54+56"
那么,我想问你,这个公式对你有什么用?
所以,问题的关键在于如何让C#认得"1*987-54+56"是一个公式并按逻辑关系计算出来.
#47
c#中有一个监视硬盘中的文件是否发生改变!
当excel变化后,保存!
当excel变化后,保存!
#48
读取公式需要先取到range
比如:
Microsoft.Office.Interop.Excel.Range range1 = xSheet.get_Range("B1", Type.Missing);
range1.Formula
range1.FormulaArray
都是跟公式有关的。
另外我试过了,当你用C#填写完了数值,并保存之后,是可以直接通过range的value2读取计算结果的,你所说的读不到,会不会跟顺序有关?一定要填写完所有数据之后再读。
比如:
Microsoft.Office.Interop.Excel.Range range1 = xSheet.get_Range("B1", Type.Missing);
range1.Formula
range1.FormulaArray
都是跟公式有关的。
另外我试过了,当你用C#填写完了数值,并保存之后,是可以直接通过range的value2读取计算结果的,你所说的读不到,会不会跟顺序有关?一定要填写完所有数据之后再读。
#49
给你一段简单的代码:
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值的变化。
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值的变化。
#50
to:zjmotion(旁门左道)
c#能够计算Excel的公式(至少能算一部分),同样是调用Microsoft.Office.Interop.Excel,随便自定义一个Range,然后按照下面的方法就能计算。
rng1.Formula = "=SUM(A:A)*100/80";
rng1.Calculate();
value = rng1.Value2.ToString();
其中value就是计算后的结果。不保存xsl同样能得到计算结果,这样对本来的文件也没有改动。
c#能够计算Excel的公式(至少能算一部分),同样是调用Microsoft.Office.Interop.Excel,随便自定义一个Range,然后按照下面的方法就能计算。
rng1.Formula = "=SUM(A:A)*100/80";
rng1.Calculate();
value = rng1.Value2.ToString();
其中value就是计算后的结果。不保存xsl同样能得到计算结果,这样对本来的文件也没有改动。