保存样式和公式
问题如下:1.现在我使用spreadsheet控件进行了绑定数据,而且使用了spread内部的公式功能,我想问这些公式是存储在哪些地方的,因为我保存数据后,再次打开该表,原来设置的公式我要提取进行还原。或是有什么好的方式进行这样情况的操作。
2.后面可能还会有其它方式对该spreadsheet界面其它编辑(字体,颜色,公式,函数等),反正总的说关于编辑speadsheet控件的设置参数是如何进行还原的,难道要重新保存整个工作簿?。
以上问题请赐教。谢谢。 回复 1楼qd98zhq的帖子
StyleInfo 可以通过内置序列化方法保存:
StyleInfo si = new StyleInfo();
(si as IXmlSerializable).WriteXml()
公式目前无法单独保存,你可以在编辑的时候自主维护一个 XML 文件记录公式信息:公式、单元格行列索引。 以上的样式 StyleInfo 如何使用呢,能不能快速获取当前工作表ActiveSheet的所有设置样式,然后如休还原回来。 回复 3楼qd98zhq的帖子
代码是遍历Spread中样式并且存储的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var style0 = new GrapeCity.Windows.SpreadSheet.Data.StyleInfo();
style0.Background = new SolidColorBrush(Colors.Blue);
style0.Name = "spstyle0";
var style1 = new GrapeCity.Windows.SpreadSheet.Data.StyleInfo();
style1.Background = new SolidColorBrush(Colors.Red);
style1.Name = "spstyle1";
gcSpreadSheet1.ActiveSheet.NamedStyles.Add(style0);
gcSpreadSheet1.ActiveSheet.NamedStyles.Add(style1);
gcSpreadSheet1.ActiveSheet.Cells.StyleName = "spstyle0";
gcSpreadSheet1.ActiveSheet.Cells.StyleName = "spstyle1";
gcSpreadSheet1.Invalidate();
string filename = "..\\..\\3.xml";
foreach (StyleInfo s in gcSpreadSheet1.ActiveSheet.NamedStyles)
{
if (File.Exists(filename))
{
Stream fs = new FileStream(filename, FileMode.Append);
XmlWriter writer = new XmlTextWriter(fs, Encoding.Unicode);
XmlSerializer xs = new XmlSerializer(typeof(GrapeCity.Windows.SpreadSheet.Data.StyleInfo));
xs.Serialize(writer, s as IXmlSerializable);
fs.Close();
}
else
{
Stream fs = new FileStream(filename, FileMode.Append);
XmlWriter writer = new XmlTextWriter(fs, Encoding.Unicode);
XmlSerializer xs = new XmlSerializer(typeof(GrapeCity.Windows.SpreadSheet.Data.StyleInfo));
xs.Serialize(writer, s as IXmlSerializable);
fs.Close();
}
}
}
你可以在此基础上添加 单元格设置情况,也就是把引用StyleInfo 的单元格索引写入 xml 文件中。
再读取这个文件即可。由于 Spread 没有内置这种方法,我们提供了以上 Work Around,剩下的代码需要您自主实现。
谢谢 感谢.我试一下,回头有什么问题再请教。先祝新年愉快 。 回复 5楼qd98zhq的帖子
好的,也祝您新春快乐。 你好,关于保存spreadsheet 表格样式格式与还原样式格式问题,现在我的想法是这样,我先把所有数据绑定列表的数据保存到数据库,然后清空所有数据,再把整个表格的所有样式保存成一个XML格式的文件,我的问题是能否直接快速通过之前保存的XML格式的文件把样式还原回来,如果可以,代码方面如何编写,能否给个DEMO,谢谢支持。
另外, GcSpreadSheet的API中文说明文档有没有呢,在哪里有下载。 回复 7楼qd98zhq的帖子
4# 中即为保存的样式方法,目前需要做的是存储对应的 Cell 索引。
获取方法可以通过StyleInfo 的 ReadXml 方法来获取。
我可以提供 XML 文件的读取方法,明天会尝试编辑。
自定义节点添加Cell索引等部分还需要您自主完成。
谢谢 我现在把数据保存为XML格式,其中数据的部分看到某些单元格文字比较多时,好像是用数据流的方式存储起来了(Base64value 的部分),如下所示,我想问的是这些数据流是加了一定的算法吗,如果我要单独提取出来显示正常的文字格式,然后进行额外保存的话我要怎么操作,代码如何写,请赐教,或是我要用什么样的方式进行还原显示出来。
<CellBlock rc="10" cc="3">
<Data>
<C pos="0,0" type="0" value="程序改造工程" />
<C pos="3,2" type="0" Base64value="True" value="MgAwADEANAAtADAANwAtADIANgDbj1VcxWC1URr/GpDHjyROKk4fZh9nhHZEjZllNmXGlgz/7nZNUhR4dnqEdtuPVVw6Tu9T5U6KYkkAVgALeo9ehHbokAZSn1L9gD5lMFJJAEUAT23IiWhWLU7Qj0yIDP8KAEZP0I9MiMePC3otThpPCWcATptOD2HzYA1OMFKEdu6VmJj6UbBzAjAKADIAMAAxADQALQAwADgALQAwADIA249VXMVgtVEa/7BzKFfvU+VOimJJAFYA404Leo9ehHZ7dlVfRmhMdWKXPmUwUkkARQAtTtCPTIgM/wlnhV+MW4RV248ATmVrjFuEVQIwCgAyADAAMQA0AC0AMAA4AC0AMAA5ANuPVVzFYLVRGv+wcyhXdGUqTpReKHULeo9e71PlTlNiBVOEdrllD18+ZTBSSQBFAC1O0I9MiAz/Rk8xdY5O11MwUnBlbmOTXr+L7pVCXIR2AF/RUyFqD19QljZSDP+wcyhX6lP9gNCPTIgoV0Bc31dRf4R2T23IiWhWLU4M/w1O/YDQj0yIKFeSTlSAUX+Edq9zg1gtTgz/f08odS1O2I8aT/pRsHMATptODU4OZoR2xWC1UQz/2I8JZ4VfjFuEVduPAE5lawOMdGWMW4RVAjAKADIAMAAxADQALQAwADgALQAxADYA249VXMVgtVEa/+52TVL9gIpiSQBWAAt6j174dnNRhHaoUgFgk15EAEwATAAM/1NiBVMQYkMAQQBCAIR2uWUPX9CPTIgoV0kARQBPbciJLU4M/wyAFE6hixJSU2KXewZcQwBBAEIABVPokHJ/MFJJAEkAUwANZ6FSaFYtTgz/2Y83aKJbN2Lvev2AuWW/T7+L7pUwUtFTA176UWVnhHYLeo9eDP9TYpd7C04qTh9mH2eEdgtOSlNoVNFTA17Zfktt1YvokH9PKHUATgtOAjAKAAoAMgAwADEANAAtADAAOQAtADIAMADbj1VcxWC1URr/jFuEVS1OLgAuAC4ACgA=" />
<C pos="4,0" type="1" value="3" />
</Data>
</CellBlock> 回复 9楼qd98zhq的帖子
当前调查进度:
var base64 = "MgAwADEANAAtADAANwAtADIANgDbj1VcxWC1URr/GpDHjyROKk4fZh9nhHZEjZllNmXGlgz/7nZNUhR4dnqEdtuPVVw6Tu9T5U6KYkkAVgALeo9ehHbokAZSn1L9gD5lMFJJAEUAT23IiWhWLU7Qj0yIDP8KAEZP0I9MiMePC3otThpPCWcATptOD2HzYA1OMFKEdu6VmJj6UbBzAjAKADIAMAAxADQALQAwADgALQAwADIA249VXMVgtVEa/7BzKFfvU+VOimJJAFYA404Leo9ehHZ7dlVfRmhMdWKXPmUwUkkARQAtTtCPTIgM/wlnhV+MW4RV248ATmVrjFuEVQIwCgAyADAAMQA0AC0AMAA4AC0AMAA5ANuPVVzFYLVRGv+wcyhXdGUqTpReKHULeo9e71PlTlNiBVOEdrllD18+ZTBSSQBFAC1O0I9MiAz/Rk8xdY5O11MwUnBlbmOTXr+L7pVCXIR2AF/RUyFqD19QljZSDP+wcyhX6lP9gNCPTIgoV0Bc31dRf4R2T23IiWhWLU4M/w1O/YDQj0yIKFeSTlSAUX+Edq9zg1gtTgz/f08odS1O2I8aT/pRsHMATptODU4OZoR2xWC1UQz/2I8JZ4VfjFuEVduPAE5lawOMdGWMW4RVAjAKADIAMAAxADQALQAwADgALQAxADYA249VXMVgtVEa/+52TVL9gIpiSQBWAAt6j174dnNRhHaoUgFgk15EAEwATAAM/1NiBVMQYkMAQQBCAIR2uWUPX9CPTIgoV0kARQBPbciJLU4M/wyAFE6hixJSU2KXewZcQwBBAEIABVPokHJ/MFJJAEkAUwANZ6FSaFYtTgz/2Y83aKJbN2Lvev2AuWW/T7+L7pUwUtFTA176UWVnhHYLeo9eDP9TYpd7C04qTh9mH2eEdgtOSlNoVNFTA17Zfktt1YvokH9PKHUATgtOAjAKAAoAMgAwADEANAAtADAAOQAtADIAMADbj1VcxWC1URr/jFuEVS1OLgAuAC4ACgA=";
var data = Convert.FromBase64String(base64);
var str = Encoding.UTF8.GetString(data);
Console.WriteLine(str);
目前展示出来为乱码,应该是中文编码问题。
可以尝试在这个基础上解决,下周会继续进行调查。
页:
[1]
2