我在Excel电子表格中有数据,其值如下:
单元格格式为百分比,并设置为显示两个小数位.因此它们在Excel中显示为:
我有一个C#程序解析了这些数据Clipboard.
var dataObj = Clipboard.GetDataObject();
var format = DataFormats.CommaSeparatedValue;
if (dataObj != null && dataObj.GetDataPresent(format))
{
var csvData = dataObj.GetData(format);
// do something
}
Run Code Online (Sandbox Code Playgroud)
问题是csvData包含Excel的显示值,即'69 .49%'和'31 .22%'.它不包含额外小数位的完整精度.
我尝试过使用各种不同的DataFormats值,但数据只包含Excel的显示值,例如:
DataFormats.DifDataFormats.RtfDataFormats.UnicodeText作为测试,我安装了LibreOffice Calc并将相同的单元格从Excel复制/粘贴到Calc中.Calc保留原始数据的完整精度.
很明显,Excel会将此数据放在其他程序可以访问的位置.如何从我的C#应用程序访问它?
编辑 - 后续步骤.
我已经下载了LibreOffice Calc源代码,并且会有一个问题,看看我是否能够从Excel中获取复制数据的完整上下文.
我还GetFormats()调用了从剪贴板返回的数据对象,并获得了24种不同数据格式的列表,其中一些不在DataFormats枚举中.这些措施包括格式,如Biff12,Biff8,Biff5,Format129其他格式不熟悉我之间,所以我会调查这些和回应,如果我做任何的发现...
我正在尝试使用 VBA 以 SVG 格式导出 Excel 图表。
Set objChrt = ActiveChart.Parent
objChrt.Activate
Set curChart = objChrt.Chart
curChart.Export fileName:=fileName, FilterName:="SVG"
Run Code Online (Sandbox Code Playgroud)
如果我用“PNG”替换“SVG”,则导出完全按预期工作并生成有效的 PNG 文件。但是,“SVG”会生成一个空文件。(手动,有一个选项可以在 Excel 365 中另存为 SVG,因此存在导出过滤器)。
根据文档,Filtername 是“图形过滤器在注册表中出现的与语言无关的名称。”,但我在注册表中找不到类似的东西,无论哪种方式,都很难想象 SVG 过滤器名称被命名为“SVG”以外的任何名称。
有没有办法使用 VBA 以 SVG 格式导出图表?
注意:还有一个关于 Chart.export 生成空文件的问题,修复是ChartObject.Activate在导出之前使用。这个问题是不同的,因为代码在“PNG”下正常工作,但在“SVG”下失败(所以这不是与激活或可见性相关的问题)。推荐的修复也不起作用。