Excell中的数据可以被C语言程序读出来吗?
请问如何读取?还有C语言能读出什么文件的数据呢?比如一些证券行情软件接受的数据,可以通过写C语言程序读取出来吗?谢谢!...
请问如何读取?
还有C语言能读出什么文件的数据呢?比如一些证券行情软件接受的数据,可以通过写C语言程序读取出来吗?
谢谢! 展开
还有C语言能读出什么文件的数据呢?比如一些证券行情软件接受的数据,可以通过写C语言程序读取出来吗?
谢谢! 展开
展开全部
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(); //退出程序
}
// 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(); //退出程序
}
展开全部
C语言只提供基本语法,它可以说能读,也可以说不能读
读取excel需要微软公司提供的接口,然后C语言通过这种接口去读
任何一种文件格式,如果有对应的接口,C都可以读,但是这种接口本身并不属于C语言
读取excel需要微软公司提供的接口,然后C语言通过这种接口去读
任何一种文件格式,如果有对应的接口,C都可以读,但是这种接口本身并不属于C语言
更多追问追答
追问
明白
我的意思是,这个接口,是免费获取还是需要开发公司收费提供?
比如excell需要向微软交费吗?
追答
excel自己需要收费,但是其开发接口似乎是免费得
不同接口是否收费都是因公司而异得,有的公司甚至根本不公开接口(如adobe没有提供pdf文件得一些重要接口)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
证券行情软件接受的数据 可以通过写C语言程序读取,一般都是通达信的数据格式;我读过
追问
方便告知如何读取吗?
是否可详细说明一下,谢谢!
qq 116599778
追答
EXCEL CVS 可以用C 读; 真的XLS 一般用VC 读
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询