Excell中的数据可以被C语言程序读出来吗?

请问如何读取?还有C语言能读出什么文件的数据呢?比如一些证券行情软件接受的数据,可以通过写C语言程序读取出来吗?谢谢!... 请问如何读取?

还有C语言能读出什么文件的数据呢?比如一些证券行情软件接受的数据,可以通过写C语言程序读取出来吗?
谢谢!
展开
 我来答
百度网友ead7934
2012-11-14 · TA获得超过286个赞
知道小有建树答主
回答量:151
采纳率:0%
帮助的人:113万
展开全部
excell当然以用程序读出来。用JAVA或者VC都可以。 贴一段VC的程序,你参考吧,不过JAVA更好用。

// MFC源代码
// 功能:修改单元格底色
void CGupiao_ExcelDlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
//用m_ExlApp对象创建Excel2003进程

if(!m_ExlApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
return;
}

//设置为可见
m_ExlApp.SetVisible(TRUE);

///////////////////下面得到应用程序所在的路径///////////////////
CString TempPath="";
char Path[MAX_PATH];

GetCurrentDirectory(MAX_PATH,Path);
TempPath = Path;
TempPath += "\\Table.xls";

m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);

m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板

m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面

// 得到第一个页面
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE);

// m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格 m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange(), TRUE);

int len;
long lines = 0, val;
Range rowCells, colCells, rowCell, colCell;

long row, column;
long color = 1, fcolor = 1; // 设置颜色
Font ft; // 设置整体的字体、字号及颜色
Interior it; // 设置底色
Range Cell;
_variant_t var;
CString context, str, sNum;

//// 设置所有单元格边框线(未完成)
m_ExlRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//设置边框

//// 以下是对列属性进行设置
// colCells.AttachDispatch(m_ExlRge.GetColumns()); // 得到所有列
// 设置第1列底色
Cell = m_ExlRge.GetItem(_variant_t((long)1),_variant_t((long)1)).pdispVal; // 第1行第1列
colCell.AttachDispatch(Cell.GetEntireColumn()); // 通过第1行第1列来获取整列
it.AttachDispatch(colCell.GetInterior());
it.SetColorIndex(_variant_t((long)36)); //底色 - 第1列

// 设置第2列底色
Cell = m_ExlRge.GetItem(_variant_t((long)1),_variant_t((long)2)).pdispVal; // 第1行第2列
colCell.AttachDispatch(Cell.GetEntireColumn()); // 通过第1行第2列来获取整列
it.AttachDispatch(colCell.GetInterior());
it.SetColorIndex(_variant_t((long)37)); //底色 - 第2列

// 设置第3列底色 - 此列为"现手"列, 底色下面会特别修改,此处可以省略
Cell = m_ExlRge.GetItem(_variant_t((long)1),_variant_t((long)3)).pdispVal; // 第1行第3列
colCell.AttachDispatch(Cell.GetEntireColumn()); // 通过第1行第3列来获取整列
// it.AttachDispatch(colCell.GetInterior());
// it.SetColorIndex(_variant_t((long)40)); //底色 - 第3列
colCell.AutoFit(); // 自适应列宽

// 设置第4列底色
Cell = m_ExlRge.GetItem(_variant_t((long)1),_variant_t((long)4)).pdispVal; // 第1行第4列
colCell.AttachDispatch(Cell.GetEntireColumn()); // 通过第1行第4列来获取整列
it.AttachDispatch(colCell.GetInterior());
it.SetColorIndex(_variant_t((long)39)); //底色 - 第4列

//// 以下是对第一行属性进行设置
rowCells.AttachDispatch(m_ExlRge.GetRows()); // 得到所有行
lines = rowCells.GetCount(); // 行的总数

Cell = m_ExlRge.GetItem(_variant_t((long)1), _variant_t((long)1)).pdispVal; // 第1行第1列
rowCell.AttachDispatch(Cell.GetEntireRow()); // 通过第1行第1列来获取整行
it.AttachDispatch(rowCell.GetInterior());
it.SetColorIndex(_variant_t((long)38)); //底色 - 第1行

ft.AttachDispatch(rowCell.GetFont());
//ft.SetColorIndex(_variant_t((long)1)); //字的颜色
ft.SetBold(_variant_t((long)1)); //粗体
//ft.SetSize(_variant_t((long)13)); //字大小

long price, max, mid, mmax;
Cell=m_ExlRge.GetItem(_variant_t((long)2),_variant_t((long)2)).pdispVal;
var = (_variant_t) Cell.GetText();
price = (long)(_variant_t)(var);

max = 500000 / price; // 50W多少手
mid = 100000 / price; // 10W多少手
mmax = 5000000 / price; // 500W多少手

//// 以下是修改"现手"这一列的属性
row = 2; // 行
column = 3; // 列

while(row <= lines)
{
Cell=m_ExlRge.GetItem(_variant_t((long)row),_variant_t((long)column)).pdispVal;
var = (_variant_t) Cell.GetText();
context = (LPCSTR)_bstr_t(var);

if (context == "")
{
return;
}

len = context.GetLength();
sNum = context;
sNum.Delete(len-2, 2);
val = atoi(sNum);

str = context.GetAt(len - 2);
str += context.GetAt(len - 1);

// 设置颜色
// 常用颜色定义,对就Excel中颜色名(少了值为17-32的颜色)
// 无色 = -4142, 自动 = -4105,
// 黑色 = 1, 白色 = 2, 红色 = 3, 鲜绿 = 4, 蓝色 = 5, 黄色 = 6, 粉红 = 7, 青绿 = 8,
// 深红 = 9, 绿色 = 10, 深蓝 = 11, 深黄 = 12, 紫罗兰=13, 青色 = 14, 灰色25=15, 灰色50 = 16,
// 天蓝 = 33, 浅青绿=34, 浅绿 = 35, 浅黄 = 36, 淡蓝 = 37, 玫瑰红=38, 淡紫 = 39, 茶色 = 40,
// 浅蓝 = 41, 水绿色=42, 酸橙色=43, 金色 = 44, 浅橙色=45, 橙色 = 46, 蓝灰 = 47, 灰色40=48,
// 深青 = 49, 海绿 = 50, 深绿 = 51, 橄榄 = 52, 褐色 = 53, 梅红 = 54, 靛蓝 = 55, 灰色80 = 56,

if (str == "--")
{
color = 19; //
}
else if (str == "↑")
{
if (val >= mmax) {
color = 5; // 蓝色
fcolor = 6; // 字体改黄色
}
else if (val >= max) // 数值高, 颜色深
color = 3;
else if (val >= mid)
color = 46;
else
color = 44;
}
else if (str == "↓")
{
if (val >= mmax) {
color = 5; // 蓝色
fcolor = 2; // 字体改白色
}
else if (val >= max) // 数值高, 颜色深
color = 10;
else if (val >= mid)
color = 4;
else
color = 43;
}

if (val >= mid)
{
ft.AttachDispatch(Cell.GetFont());

if (val >= mmax) // 超过mmax时修改字的颜色 ft.SetColorIndex(_variant_t((long)fcolor));
ft.SetBold(_variant_t((long)1)); // 粗体
//ft.SetSize(_variant_t((long)13)); // 字大小
}

it.AttachDispatch(Cell.GetInterior());
it.SetColorIndex(_variant_t((long)color)); //底色

color = 1;
fcolor = 1;
row++;
}

//// 以下是为了在第一行前插入一行时间
const long xlShiftDown = -4121; //常量
Cell = m_ExlRge.GetItem(_variant_t((long)1), _variant_t((long)1)).pdispVal; // 第1行第1列
rowCell.AttachDispatch(Cell.GetEntireRow()); // 通过第1行第1列来获取整行
rowCell.Insert(COleVariant(xlShiftDown), _variant_t((long)0)); //在第一行之前插入空白行

//加载要合并的单元格
m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")),TRUE);
m_ExlRge.Merge(_variant_t((long)0));

m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t(GetTimeString()));
//设置齐方式为水平靠左垂直居中
//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152
//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4131));
m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108));

//粗体, 底色为酸橙色
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetBold(_variant_t((long)1)); // 粗体
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((long)43)); // 底色为酸橙色

//// 释放对象(相当重要!)
m_ExlRge.ReleaseDispatch();
m_ExlSheet.ReleaseDispatch();
m_ExlSheets.ReleaseDispatch();
m_ExlBook.ReleaseDispatch();
m_ExlBooks.ReleaseDispatch();
//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
m_ExlApp.ReleaseDispatch();

m_ExlApp.Quit(); //退出程序
}
arongustc
科技发烧友

2012-11-11 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:6013万
展开全部
C语言只提供基本语法,它可以说能读,也可以说不能读
读取excel需要微软公司提供的接口,然后C语言通过这种接口去读
任何一种文件格式,如果有对应的接口,C都可以读,但是这种接口本身并不属于C语言
更多追问追答
追问
明白

我的意思是,这个接口,是免费获取还是需要开发公司收费提供?
比如excell需要向微软交费吗?
追答
excel自己需要收费,但是其开发接口似乎是免费得
不同接口是否收费都是因公司而异得,有的公司甚至根本不公开接口(如adobe没有提供pdf文件得一些重要接口)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
数码创新服务
2012-11-12 · TA获得超过247个赞
知道小有建树答主
回答量:733
采纳率:0%
帮助的人:476万
展开全部
证券行情软件接受的数据 可以通过写C语言程序读取,一般都是通达信的数据格式;我读过
追问
方便告知如何读取吗?

是否可详细说明一下,谢谢!
qq 116599778
追答
EXCEL CVS 可以用C 读;  真的XLS 一般用VC 读
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式