2022-11-29 23:25来源:m.sf1369.com作者:宇宇
1、注意Office版本,一般office2016环境下写的东西,office2013环境下是运行不了的。(据说可以有第三方库支持,以后慢慢研究)
2、注意中断程序号一定要注销计算机,否则docx文件老是提示被占用。
3、注意try catch finally一定得加上。
4、多余符号用正则表达排除
/// <summary>
/// 获取word文件的文本内容
/// </summary>
/// <param name="docFileName"></param>
/// <returns></returns>
private string DocToExcel2(string docFileName)
{
//实例化COM
Word.ApplicationClass app = null;
Word.Document wd = null;
object nullobj = System.Reflection.Missing.Value;
object fileobj = docFileName;
string context = string.Empty;
try
{
app = new Word.ApplicationClass();
wd = app.Documents.Open(ref fileobj, ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj);
//取得doc文件中的文本内容
foreach (Word.Table table in wd.Tables)
{
//遍历每一行去处理
for (int k = 0; k < table.Rows.Count; k++)
{
string firstContent = table.Cell(k, 1).Range.Text;
//图上编号
Regex regTSBH1 = new Regex(@"^图上编号.+");
//Match mcMPH1 = regMPH1.Match();
if (regTSBH1.IsMatch(firstContent))
{
Regex regTSBH2 = new Regex(@"^([^\t\v\s]+).+");
Match mcTSBH2 = regTSBH2.Match(table.Cell(k, 2).Range.Text.Trim());
context += /*mcMPH1.Groups[1].Value.Trim() + "," + */mcTSBH2.Groups[1].Value.Trim() + ",";
}
//门牌号
Regex regMPH1 = new Regex(@"^门牌号.+");
//Match mcMPH1 = regMPH1.Match();
if (regMPH1.IsMatch(firstContent))
{
Regex regMPH2 = new Regex(@"^([^\t\v\s]+).+");
Match mcMPH2 = regMPH2.Match(table.Cell(k, 2).Range.Text.Trim());
context += /*mcMPH1.Groups[1].Value.Trim() + "," + */mcMPH2.Groups[1].Value.Trim() + ",";
}
//户主
Regex regHZ1 = new Regex(@"^户主.+");
//Match mcHZ1 = regHZ1.Match(table.Cell(5, 1).Range.Text.Trim());
if (regHZ1.IsMatch(firstContent))
{
Regex regHZ2 = new Regex(@"^^([^\t\v\s]+).+");
Match mcHZ2 = regHZ2.Match(table.Cell(k, 2).Range.Text.Trim());
context += /*mcHZ1.Groups[1].Value.Trim() + "," + */mcHZ2.Groups[1].Value.Trim() + ",";
}
//电话
Regex regDH1 = new Regex(@"^电话.+");
//Match mcDH1 = regDH1.Match(table.Cell(6, 1).Range.Text.Trim());
if (regDH1.IsMatch(firstContent))
{
Regex regDH2 = new Regex(@"^([^\t\v\s]+).+");
Match mcDH2 = regDH2.Match(table.Cell(k, 2).Range.Text.Trim());
context += /*mcDH1.Groups[1].Value.Trim() + "," + */mcDH2.Groups[1].Value.Trim() + ",";
}
//楼层数
Regex regLCS1 = new Regex(@"^楼层数.+");
//Match mcLCS1 = regLCS1.Match(table.Cell(7, 1).Range.Text.Trim());
if (regLCS1.IsMatch(firstContent))
{
Regex regLCS2 = new Regex(@"^([^\t\v\s]+).+");
Match mcLCS2 = regLCS2.Match(table.Cell(k, 2).Range.Text.Trim());
context += /*mcLCS1.Groups[1].Value.Trim() + "," + */mcLCS2.Groups[1].Value.Trim() + ",";
context += /*mcLCS1.Groups[1].Value.Trim() + "," + */docFileName + "\r\n";
}
//文件名,用于排错
//Regex regLCS1 = new Regex(@"^([\u4e00-\u9fa5]+).+");
//Match mcLCS1 = regLCS1.Match(table.Cell(7, 1).Range.Text.Trim());
//if((k % 7 == 0)&&(k != 0))
//{
// context += /*mcLCS1.Groups[1].Value.Trim() + "," + */docFileName + "\r\n";
//}
}
}
}
catch (Exception error)
{
MessageBox.Show("Error:" + error.Message);
}
finally
{
//关闭文件
wd.Close(ref nullobj, ref nullobj, ref nullobj);
//关闭COM
app.Quit(ref nullobj, ref nullobj, ref nullobj);
}
//返回文本内容
return context;
}
方法:
1、在正式获取外部数据之前,注意先做好TXT文本数据的分隔工作,可用的分隔符包括空格、制表符、英文的逗号以及分号四种,做完所有的分隔工作后保存这篇文档;
2、打开一篇空白工作簿,切换到数据功能区,选择“获取外部数据”中的“自文本”;
3、在“导入文本文件”对话框中,选择需要导入的TXT文件,导入;
4、在弹出的“文本导入向导 - 第1步,共3步”对话框中,选择分隔符,下一步;
5、在弹出的“文本导入向导 - 第2步,共3步”对话框,勾选所有可用的分隔符号(或按需要进行选择),下一步;
6、在弹出的“文本导入向导 - 第3步,共3步”对话框中,选择默认列数据格式(按自身需要),即可。 注:可在数据预览中查看结果,并做出适当调整。
excel表格填写数字出现乱码怎么办,后面变为零,解决方法:
excel表格输入数字变成乱码,是因为格式设置的不对,设置成文本格式就行了。
1、选择需要更改格式的数据,点击鼠标右键;
2、选择设置单元格格式;
3、选中设置单元格格式,点击鼠标左键,弹出单元格格式框;
4、在格式框,选择数字一栏的文本选项,点击确定;
5、然后可以看到,数字已经回复正常了
一、 包含Excel文件操作类头文件 #include "CSpreadSheet.h"
二、 新建Excel文件,并写入默认数据 // 新建Excel文件名及路径,TestSheet为内部表名 CSpreadSheet SS("c:\\Test.xls"
原因:没有在粘贴时选择粘贴源格式,导致原单元格的格式与内容没有粘贴完全。
1、首先打开一个excel表格,在表格中输入数据,并在其中一个单元格中插入批注。
2、选中有数据的单元格,使用“Ctrl+C”执行复制操作。
3、然后跳转到新的表格页面,点击鼠标右键,在弹出的选项中点击“选择性粘贴”中的“粘贴源格式”。
4、即可将原单元格中插入的批注在新的表格中粘贴出来了。
可通过表格数据有效性限制行数:
1/5
首先打开一个Excel表格:
2/5
选中需要输入电话号码的单元格,点击工具栏【数据】选项,下拉菜单选择【有效性】,二级菜单也是【有效性】:
3/5
在弹出的对话框中,“设置”一栏,“允许”选择“文本长度”,“数据”选择“等于”,“数值”输入“11”,点击确定:
4/5
最后我们输入一个电话号码试一下,输入了12位就显示错误提示框:
5/5
输入11位则不会显示,这样表格行数即可被限制:
fun是函数的代码标识,excel是表格软件
1、要使用C语言进行Excel文件的读取,要用到专门的函数,并使用指针做内存位移操作;
2、在执行读取Excel文件的操作时,需要使用函数有:
fopen: 此函数用来打开指定的文件,返回文件指针
fseek:这个函数主要用来进行文件随机定位,通过定位,读取指定位置的数据
fscanf:用来从指定位置获取数据
fclose:用来将打开的文件关闭
3、fseek函数的一般调用格式如下:fseek(文件指针,位移量,起始位置) ;
其中参数位移量,是指重新定位时的字节偏移数,表示相对于基址的字符数,通常是一个长整型数,可以是整形常量,整形表达式等。
4、对于fseek函数的起始位置参数,是指重新定位时的基准点,也就是基址,用整数或符合常量表示,包括:
0:符号常量为SEEK_SET,表示文件开头
1:符号常量为SEEK_CUR,表示文件指针的当前位置
2:符号常量为SEEK_END,表示文件末尾
函数使用如下例: fseek(fp , 10L , 0) ;
步骤1:点击开始,打开Microsoft Excel 2010。
2
步骤2:打开之后,点击数据,其他来源,来自SQL Server。
3
步骤3:打开数据链接向导之后,输入服务器名称和登陆用户名和密码。点击下一步。
步骤4:点击下一步之后,报错,不能够正常链接数据库。
步骤5:打开SQL Server 数据库代理服务器,查看代理停止工作,将其启动。
步骤6:修改服务器名称为SQL Server所在的服务器的IP地址填写入服务器名称,登陆名称和密码全部为sa。
步骤7:进入,选择数据库和表。选择PUBS,点击下一步。
步骤8:点击下一步,保持链接文件,点击完成。
步骤9:点击导入数据
步骤10
连接属性,连接名称:172.16.0.31
pubs employee,连接文件:C:\Documents and Settings\lys\My
Documents\我的数据源\172.16.0.31 pubs employee.odc 连接字符串:
Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Data
Source=172.16.0.31;Use Procedure for Prepare=1;Auto
Translate=True;Packet Size=4096;Workstation ID=L10-1DA235E90;Use
Encryption for Data=False;Tag with column collation when
possible=False;Initial Catalog=pubs 命令文本:"pubs"."dbo"."employee"
步骤11:点击确定,输入密码Sa。
步骤12: 我们可以看到将SQL Server数据写入了EXCEL中。
查询EXCEL中数据库:
查询数据库中数据:
SELECT *
FROM employee
好像很难。Excel 一般都是手工操作,要用到 macro 就是高手了。用C++来扩展Excel,要写动态链接库,做接口。详细请参考资料。(英文的)pdf 格式。
简单的方法是通过ODBC来实现:
具体实现一、 包含Excel文件操作类头文件#include "CSpreadSheet.h"二、 新建Excel文件,并写入默认数据// 新建Excel文件名及路径,TestSheet为内部表名CSpreadSheet SS("c:\\Test.xls", "TestSheet");CStringArray sampleArray, testRow;SS.BeginTransaction()
;// 加入标题sampleArray.RemoveAll();sampleArray.Add("姓名");sampleArray.Add("年龄");SS.AddHeaders(sampleArray)
;// 加入数据CString strName[] = {"徐景周","徐志慧","郭徽","牛英俊","朱小鹏"};CString strAge[] = {"27","23","28","27","26"};for(int i = 0; i < sizeof(strName)/sizeof(CString); i++){sampleArray.RemoveAll();sampleArray.Add(strName[i]);sampleArray.Add(strAge[i]);SS.AddRow(sampleArray);}SS.Commit()
;三、 读取Excel文件数据CSpreadSheet SS("c:\\Test.xls", "TestSheet");CStringArray Rows, Column;//清空列表框m_AccessList.ResetContent();for (int i = 1; i <= SS.GetTotalRows(); i++){// 读取一行SS.ReadRow(Rows, i);CString strContents = "";for (int j = 1; j <= Rows.GetSize(); j++){if(j == 1)strContents = Rows.GetAt(j-1)
;elsestrContents = strContents + " --> " + Rows.GetAt(j-1);}m_AccessList.AddString(strContents);}