利用vc的mfc做的Excel表格处理工具

下面两个文件是逻辑处理文件。已经调通。

CExcelmadetoolDlg.h

在这里插入代码片
// ExcelmadetoolDlg.h : header file
//

#if !defined(AFX_EXCELMADETOOLDLG_H__9A8C90C3_A3D6_4DCB_BC96_4F62C05EEE78__INCLUDED_)
#define AFX_EXCELMADETOOLDLG_H__9A8C90C3_A3D6_4DCB_BC96_4F62C05EEE78__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/
// CExcelmadetoolDlg dialog
#include "tlhelp32.h"   //头文件
class CExcelmadetoolDlg : public CDialog
{
     
// Construction
public:
	CExcelmadetoolDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{
     {AFX_DATA(CExcelmadetoolDlg)
	enum {
      IDD = IDD_EXCELMADETOOL_DIALOG };
		// NOTE: the ClassWizard will add data members here
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{
     {AFX_VIRTUAL(CExcelmadetoolDlg)
       
	   int madeExcel();
	   void GetEditworth();//获取控件的值
	   void GetSNAllworth();//获取sn总共的值
	   long chToLong(const char *ch,int len);//用于处理填入序列号的数据

	   
	void  StrtoInt(CString *const putStr,int *const putInt);//字符串转换为int,不能改变指针地址
	CString strSNAllPath;//用于添加SN表单的路径
	CString strADDRPath;//用于添加地址表单的路径
		   
	int startLine;//起始行
	int EndLine;//终止行

	CString StartSN;//起始SN序列号
	CString CSLogistics;//物流公司
	CString CSLogisticsNumber;//物流单号
	int IClientSnNum;//客户SN序列号总数
	CString SheetName;//表单名字
	int  impliedSNAllLine;//默认打印总的表格数字

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//EDIT控件
	CEdit* pBoxStart;
    CEdit* pBoxEnd;
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{
     {AFX_MSG(CExcelmadetoolDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnOk2();
	afx_msg void Onaddr();
	virtual void OnOK();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{
     {AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_EXCELMADETOOLDLG_H__9A8C90C3_A3D6_4DCB_BC96_4F62C05EEE78__INCLUDED_)

CExcelmadetoolDlg.cpp

在这里插入代码片
// ExcelmadetoolDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Excelmadetool.h"
#include "ExcelmadetoolDlg.h"
#include 
#include "excel.h"
#include 
#include 
#include   
#include   
#include  
#include  
#include 
#include 

#pragma comment(lib,"shlwapi.lib") //如果没有这行,会出现link错误
//#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

	
//要操作表,必须先逐步获取Workbooks->Workbook->Worksheets->Worksheet->Range
//并设置全局变量
_Application g_app;
Workbooks g_books;
_Workbook g_book;
Sheets   g_sheets;        //低版本Office请将这改为 WorkSheets
_Worksheet g_sheet;
Range g_range;
Font font;
int SNnum=0;





/
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
     
public:
	CAboutDlg();

// Dialog Data
	//{
     {AFX_DATA(CAboutDlg)
	enum {
      IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{
     {AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{
     {AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
     
	//{
     {AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
     
	CDialog::DoDataExchange(pDX);
	//{
     {AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{
     {AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CExcelmadetoolDlg dialog

CExcelmadetoolDlg::CExcelmadetoolDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CExcelmadetoolDlg::IDD, pParent)
{
     
	//{
     {AFX_DATA_INIT(CExcelmadetoolDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CExcelmadetoolDlg::DoDataExchange(CDataExchange* pDX)
{
     
	CDialog::DoDataExchange(pDX);
	//{
     {AFX_DATA_MAP(CExcelmadetoolDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CExcelmadetoolDlg, CDialog)
	//{
     {AFX_MSG_MAP(CExcelmadetoolDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDOK2, OnOk2)
	ON_BN_CLICKED(IDOK3, Onaddr)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CExcelmadetoolDlg message handlers

BOOL CExcelmadetoolDlg::OnInitDialog()
{
     
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
     
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
     
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
		
	//绑定控件
	pBoxStart = (CEdit*) GetDlgItem(IDC_EDIT1);
	pBoxEnd   = (CEdit*) GetDlgItem(IDC_EDIT2);
	//初始化
	startLine=0;
	EndLine=0;
	//给定控件默认值
	pBoxStart-> SetWindowText( "2" );
	pBoxEnd-> SetWindowText( "2" );
	AfxOleInit();
	    if(!g_app.CreateDispatch("Excel.Application"))
    {
     
        AfxMessageBox("无法启动Excel服务器");
        return;
    }

		SetWindowText("Excel表格处理工具");
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CExcelmadetoolDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
     
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
     
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
     
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CExcelmadetoolDlg::OnPaint() 
{
     
	if (IsIconic())
	{
     
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
     
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CExcelmadetoolDlg::OnQueryDragIcon()
{
     
	return (HCURSOR) m_hIcon;
}

void CExcelmadetoolDlg::OnOk2() 
{
     
	// TODO: Add your control notification handler code here

	    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 


       
	CFileDialog dlg(true,"配置文件",NULL,0, "表格文件(.xls)|*.xls|表格文件(.xlsx)|*.xlsx");
		 //打开文件
    if(IDOK==dlg.DoModal())
        strSNAllPath =dlg.GetPathName();
	                                       
   
	//没有添加提示,工作簿创建
//    if(!g_app.CreateDispatch("Excel.Application"))
//    {
     
//        AfxMessageBox("无法启动Excel服务器");
//        return;
//    }
	//利用模板文件建立新文档 
  g_books.AttachDispatch(g_app.GetWorkbooks(),true); 
  g_book.AttachDispatch(g_books.Add(_variant_t(strSNAllPath)),true);
  
//    //获取所有的工作簿
//    g_books = g_app.GetWorkbooks(); 
//
//    //用来锁定对应的工作簿           
//    g_books.AttachDispatch(g_app.GetWorkbooks(),true);       
//    g_book = g_books.Open( strSNAllPath,covOptional,covOptional,
//          covOptional,covOptional,covOptional,covOptional,
//          covOptional,covOptional,covOptional,covOptional,
//          covOptional,covOptional,covOptional,covOptional);

    
	//得到Worksheets,工作表
    g_sheets.AttachDispatch(g_book.GetWorksheets(),true);
    g_sheet=g_sheets.GetItem(COleVariant((short)1));

	//获得使用的区域

	g_range.AttachDispatch(g_sheet.GetUsedRange(),true);

	//获取使用的行数
	int usedrowNum=0;
    g_range.AttachDispatch(g_range.GetRows(),true);
	usedrowNum=g_range.GetCount();

		
	//获取使用的列数
	int usedrowCol=0;
    g_range.AttachDispatch(g_range.GetColumns(),true);
	usedrowCol=g_range.GetCount();

	//获取第一行第一列的值
	COleVariant vResult;
	g_range.AttachDispatch(g_sheet.GetCells());
    g_range.AttachDispatch(g_range.GetItem(COleVariant((long)2), COleVariant((long)1)).pdispVal);//行与列

    vResult = g_range.GetValue2();

	//获取工作表的名字
	CString sheetName=g_sheet.GetName();
	//展现文档
//	g_app.SetVisible(true); 
	//释放对象 
	g_books.Close();
	g_app.Quit();
g_range.ReleaseDispatch(); 
g_sheet.ReleaseDispatch(); 
g_sheets.ReleaseDispatch(); 
g_book.ReleaseDispatch(); 
g_books.ReleaseDispatch(); 
g_app.ReleaseDispatch(); 
	
}


void CExcelmadetoolDlg::OnOK() 
{
     
	// TODO: Add extra validation here


//_Application g_Newapp;
//Workbooks g_Newbooks;
//_Workbook g_Newbook;
//Sheets   g_Newsheets;        //低版本Office请将这改为 WorkSheets
//_Worksheet g_Newsheet;
//Range g_Newrange;
//Font Newfont;

//GetEditworth();//获取EDIT控件的值

if( FAILED( CoInitialize(NULL) ) )
{
     
AfxMessageBox("初始化COM支持库失败!");
}

//利用模板文件建立新文档 
//g_Newbooks.AttachDispatch(g_Newapp.GetWorkbooks(),true); 
// g_Newbook.AttachDispatch(g_Newbooks.Add(_variant_t(strADDRPath)),true); 
//	//得到Worksheets 
//g_Newsheets.AttachDispatch(g_Newbook.GetWorksheets(),true); 
//得到sheet1 
//g_Newsheet.AttachDispatch(g_Newsheets.GetItem(_variant_t("sheet1")),true); 
//得到全部Cells,此时,g_range是cells的集合 
//g_Newrange.AttachDispatch(g_Newsheet.GetCells(),true); 
//设置1行1列的单元的值 
//g_Newrange.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!")); 
//得到所有的列 
//g_Newrange.AttachDispatch(g_Newsheet.GetColumns(),true); 
//得到第一列 
//g_Newrange.AttachDispatch(g_Newrange.GetItem(_variant_t((long)1),vtMissing).pdispVal,true); 
//设置列宽 
//g_Newrange.SetColumnWidth(_variant_t((long)20)); 
//Range cols;
//cols = g_Newrange.GetEntireColumn();//选择整列,并设置宽度为自适应
//cols.AutoFit();
//调用模板中预先存放的宏 
//g_app.Run(_variant_t("CopyRow"),_variant_t((long)10),  _variant_t(vtMissing),_variant_t(vtMissing), 
//_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing), 
//_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing), 
//_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing), 
//_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing)); 
//制作表格
//font=g_range.GetFont();
//	g_range=g_sheet.GetRange(COleVariant("A2"),COleVariant("A2"));
//g_range.SetFormula(COleVariant("=RAND()*100000"));
//g_range.SetNumberFormat(COleVariant("$0.00"));
//制作表格内容
       //填写标题.
//   g_range = g_sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
//   g_range.SetNumberFormatLocal(COleVariant("列1"));
//   g_range = g_sheet.GetRange(COleVariant("B1"),COleVariant("B1"));
//   g_range.SetNumberFormatLocal(COleVariant("列2"));
//   g_range = g_sheet.GetRange(COleVariant("C1"),COleVariant("C1"));
//   g_range.SetNumberFormatLocal(COleVariant("列3"));
//   g_range = g_sheet.GetRange(COleVariant("D1"),COleVariant("D1"));
//   g_range.SetNumberFormatLocal(COleVariant("列4"));
//   g_range = g_sheet.GetRange(COleVariant("E1"),COleVariant("E1"));
//   g_range.SetNumberFormatLocal(COleVariant("列5"));
  
   

// g_Newrange.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("SN序列号"));
// g_Newrange.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t("物流单号"));
 //
    //获取所有的工作簿
 	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 
		   
	if(!g_app.CreateDispatch("Excel.Application"))
    {
     
        AfxMessageBox("无法启动Excel服务器");
        return;
    }
	//为了防止用户多点
	MessageBox("正在写入,请稍后!");
    g_books = g_app.GetWorkbooks();   
    //用来锁定对应的工作簿           
     g_books.AttachDispatch(g_app.GetWorkbooks(),true);  
	 g_book.AttachDispatch(g_books.Add(_variant_t(strADDRPath)),true);
	 
	 /*
    g_book = g_books.Open( strADDRPath,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional);
		  */
		 
	//得到Worksheets,工作表
    g_sheets.AttachDispatch(g_book.GetWorksheets(),true);
    g_sheet=g_sheets.GetItem(COleVariant((short)1));
	//获得使用的区域
	g_range.AttachDispatch(g_sheet.GetUsedRange(),true);

	//获取使用的行数
	int usedrowNum=0;
    g_range.AttachDispatch(g_range.GetRows(),true);
	usedrowNum=g_range.GetCount();	
	//获取使用的列数
	int usedrowCol=0;
    g_range.AttachDispatch(g_range.GetColumns(),true);
	usedrowCol=g_range.GetCount();

 //获取收货公司表单
 	//获取第2行第6列的值
    GetEditworth();//函数出现问题
	    //取值
//    CString strStart;
//	CString strEnd;
//
//    pBoxStart-> GetWindowText(strStart);
//	pBoxEnd-> GetWindowText(strEnd);

//	 startLine= atoi( LPCTSTR(strStart) );
//	 EndLine= atoi( LPCTSTR(strEnd) );

	for(int i=startLine;i<EndLine+1;i++)
	{
     
		//获取第I行表单总数
		
//		COleVariant vResultSNALL;
//	    g_range.AttachDispatch(g_sheet.GetCells());
//        g_range.AttachDispatch(g_range.GetItem(COleVariant((long)i), COleVariant((long)6)).pdispVal);//行与列
//        vResultSNALL = g_range.GetValue2();
		
		_variant_t var;
        CString tmpStr;//存储每个格子的数据
		g_range.AttachDispatch(g_sheet.GetCells());

		var =g_range.GetItem(_variant_t((long)i),_variant_t((long)7));//读取第r行c列的数据,注意行和列都是从1开始
        tmpStr.Format("%s",(char*)(_bstr_t)var);//转换成CString
    	StrtoInt(&tmpStr,&IClientSnNum);

		//CString CSnAll;
		//CSnAll.Format("%f", vResultSNALL.dblVal); 
	

		//SN起始数
		var =g_range.GetItem(_variant_t((long)i),_variant_t((long)8));//读取第r行c列的数据,注意行和列都是从1开始
        StartSN.Format("%s",(char*)(_bstr_t)var);//转换成CString

		//物流公司名字
		var =g_range.GetItem(_variant_t((long)i),_variant_t((long)10));//读取第r行c列的数据,注意行和列都是从1开始
        CSLogistics.Format("%s",(char*)(_bstr_t)var);//转换成CString
				
		//物流单号
		var =g_range.GetItem(_variant_t((long)i),_variant_t((long)11));//读取第r行c列的数据,注意行和列都是从1开始
        CSLogisticsNumber.Format("%s",(char*)(_bstr_t)var);//转换成CString

//		COleVariant vResultWuliu;
//        g_range.AttachDispatch(g_range.GetItem(COleVariant((long)i), COleVariant((long)9)).pdispVal);//行与列
//        vResultWuliu = g_range.GetValue2();
//		CSLogistics=(BSTR)vResultWuliu.pbstrVal;
	    //CSLogistics.Format("%f", vResultWuliu.dblVal); 
 
		//给定表单名字

		CString strCOmpany;
		CString strPeopleName;


				
		//获取收货公司序号
		CString CNumberComper;
		var =g_range.GetItem(_variant_t((long)i),_variant_t((long)3));//读取第r行c列的数据,注意行和列都是从1开始
        CNumberComper.Format("%s",(char*)(_bstr_t)var);//转换成CString


		//获取公司名字
		var =g_range.GetItem(_variant_t((long)i),_variant_t((long)4));//读取第r行c列的数据,注意行和列都是从1开始
        strCOmpany.Format("%s",(char*)(_bstr_t)var);//转换成CString

//		COleVariant vResultGetcompany;
//        g_range.AttachDispatch(g_range.GetItem(COleVariant((long)i), COleVariant((long)3)).pdispVal);//行与列
//        vResultGetcompany = g_range.GetValue2();
//		strCOmpany=(BSTR)vResultGetcompany.pbstrVal;
		//strCOmpany.Format("%f", vResultGetcompany.dblVal); 

		//获取人名
				
		var =g_range.GetItem(_variant_t((long)i),_variant_t((long)4));//读取第r行c列的数据,注意行和列都是从1开始
        strPeopleName.Format("%s",(char*)(_bstr_t)var);//转换成CString

		//除掉人名后面的电话号码
		//rPeopleName = strPeopleName.substr(0, strPeopleName.length() - 11);
		//rPeopleName.erase(strPeopleName.end() - 1);
		
//		COleVariant vResultGetPeopleName;
//        g_range.AttachDispatch(g_range.GetItem(COleVariant((long)i), COleVariant((long)4)).pdispVal);//行与列
//        vResultGetPeopleName = g_range.GetValue2();
//		strPeopleName=(BSTR)vResultGetcompany.pbstrVal;
	//	strPeopleName.Format("%f", vResultGetPeopleName.dblVal); 
		//表单名字
		SheetName=CNumberComper+strCOmpany+strPeopleName;
	
		madeExcel();
			
	
	}
    
	//导入数据.
//   putlonth=Modeworth.GetLength();
//   putWorth=Modeworth.Right(putlonth-3);
//   //总行数
//   int AllrowsWorth=100;

   
 //madeExcel() ;
//int m,n;
//int rows=50;
//打印预览 
g_book.SetSaved(true); 
g_app.SetVisible(true); 
//
//g_book.PrintPreview(_variant_t(false)); 
//释放对象 
	g_books.Close();
	g_app.Quit();
g_range.ReleaseDispatch(); 
g_sheet.ReleaseDispatch(); 
g_sheets.ReleaseDispatch(); 
g_book.ReleaseDispatch(); 
g_books.ReleaseDispatch(); 
g_app.ReleaseDispatch(); 
//
MessageBox("生产表单完毕!!");
CDialog::OnOK();
}


//创建表格
int CExcelmadetoolDlg::madeExcel() 
{
     


_Application  g_Newapp;
Workbooks     g_Newbooks;
_Workbook     g_Newbook;
Sheets        g_Newsheets;        //低版本Office请将这改为 WorkSheets
_Worksheet    g_Newsheet;
Range         g_Newrange;
Font          Newfont;


if( FAILED( CoInitialize(NULL) ) )
{
     
   AfxMessageBox("初始化COM支持库失败!");
}
//AfxOleInit();//会引起中断
//  //导出



//g_app.ReleaseDispatch();
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if(!g_Newapp.CreateDispatch("Excel.Application"))
{
     
	MessageBox("无法创建Excel应用!");
   // exit(1);
}
//利用模板文件建立新文档 
g_Newbooks.AttachDispatch(g_Newapp.GetWorkbooks(),true); 
 //g_Newbook.AttachDispatch(g_Newbooks.Add(_variant_t(strADDRPath)),true); 
g_Newbook=g_Newbooks.Add(covOptional); 
	//得到Worksheets 
g_Newsheets.AttachDispatch(g_Newbook.GetWorksheets(),true); 
//得到sheet1 
//g_Newsheet.AttachDispatch(g_Newsheets.GetItem(_variant_t("sheet1")),true); 
  
//得到第一个工作表
g_Newsheet=g_Newsheets.GetItem(COleVariant((short)1));
	//获得使用的区域
//得到全部Cells,此时,g_range是cells的集合 
g_Newrange.AttachDispatch(g_Newsheet.GetCells(),true); 
//设置1行1列的单元的值 
//g_Newrange.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!")); 
//得到所有的列 
g_Newrange.AttachDispatch(g_Newsheet.GetColumns(),true); 
//得到第一列 
//g_Newrange.AttachDispatch(g_Newrange.GetItem(_variant_t((long)1),vtMissing).pdispVal,true); 
//设置列宽 
g_Newrange.SetColumnWidth(_variant_t((long)20)); 
Range cols;
cols = g_Newrange.GetEntireColumn();//选择整列,并设置宽度为自适应
cols.AutoFit();
cols.ReleaseDispatch();
bool TFvisible=false;
g_Newapp.SetVisible(TFvisible);  
	
//不加文件删不掉
g_Newapp.SetUserControl(TRUE);

CString SaveFilePath=_T("D:\\SaveExcel");

CString ExcelName=SheetName+".xlsx";
CString SaveExcelPath="D:\\SaveExcel\\"+ExcelName;
if(!PathIsDirectory(SaveFilePath))
{
     
	//CreateDirectioy(SaveExcelPath,NULL);
	AfxMessageBox("存储路径不存在!请在D盘根目录下建立SaveExcel文件夹,注意大小写");
    exit(1);
}




//选择工作表中A1:A1单元格区域
	g_Newrange=g_Newsheet.GetRange(COleVariant("A1"),COleVariant("A1")); 
	g_Newrange.SetValue2(COleVariant("SN序列号"));  //range.SetValue()必为range.SetValue2() //g_Newrange.SetFormulaR1C1( COleVariant("SN序列号") );
   
	//选择工作表中A1:B1单元格区域
	g_Newrange=g_Newsheet.GetRange(COleVariant("B1"),COleVariant("B1")); 
	g_Newrange.SetValue2(COleVariant("物流公司物流单号"));  //range.SetValue()必为range.SetValue2()

 //将CString转化为char数组
 char szTemp[30]="";
 memcpy(szTemp,StartSN,StartSN.GetLength()); 
 //strcpy_s(szTemp, StartSN);
   
 

 int numIS0;//表示前面有多少0,最后添加
  //去掉char数组前面的0
 int snLonth=strlen(szTemp);
 for (int i=0;i<strlen(szTemp);i++) 
 {
     
	 if (szTemp[i]!='0')
	 {
      numIS0=i;
       break; //找出前面有几个0
	 }
 }
  strcpy(szTemp,szTemp+i); // 搬动字符串,版去掉领头的零

  unsigned long a = 0;
  unsigned long b = 1;
  unsigned long sum = 0;

 for(i =strlen(szTemp)-1;i >= 0;i--)
 {
     
  a= szTemp[i] - '0';
  a =a*b;
  sum += a;
  b = b*10;
 }
 int szTlong=strlen(szTemp);
  //
 CString CTempSNnumber;
 CTempSNnumber.Format("%s",szTemp);
//  char ch[]="123456789123456";
// unsigned __int64 LLsum=chToLong(ch,strlen(ch));
// unsigned __int64  mmmm=atoi(CTempSNnumber);
//
// 
// unsigned __int64 LStartSN;//= atol(a);
// unsigned __int64 LongthSN= _ttol(CTempSNnumber);
 //unsigned 
 __int64 UI64SNnumber=0;
 sscanf((LPSTR)(LPCTSTR)CTempSNnumber,"%I64d",&UI64SNnumber);
 
//long filesize;
//filesize=atol(m_FileSize.GetBuffer(m_FileSize.GetLength()));



//  char * pchar;
// pchar=(LPSTR)(LPCSTR)StartSN;

 for(int j=2;j<IClientSnNum+2;j++ )
	{
     
        char c='0';
	    CTempSNnumber.Format("%I64d",UI64SNnumber);
	   for(int n=0;n<numIS0;n++)
	   {
     
	     CTempSNnumber=c+CTempSNnumber;
	   }

	   CTempSNnumber="'"+CTempSNnumber;
	   //StartSN=CTempSNnumber;
	  // StartSN.Format(_T("%I64d"),IStartSN);
	   //g_Newrange.SetItem(_variant_t((long)j),_variant_t((long)0),_variant_t(CTempSNnumber));

//	     g_Newrange.Select();
//              g_Newrange.SetNumberFormatLocal(COleVariant("@"));
	   g_Newrange.SetItem(_variant_t((long)j),_variant_t((long)0),COleVariant(CTempSNnumber));
	 
	   if(j<3)
	   {
     
	       g_Newrange.SetItem(_variant_t((long)j),_variant_t((long)1),_variant_t(CSLogistics+CSLogisticsNumber));
	   }
	 //  g_Newrange.SetItem(_variant_t((long)j),_variant_t((long)2),_variant_t(CSLogisticsNumber));//CSLogisticsNumber
	   //       
	   //水平对齐:默认=1,居中=-4108,左=-4131,右=-4152 
       //垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107 
	    //设置齐方式为水平垂直居中 
//       g_Newrange.SetHorizontalAlignment(_variant_t((long)-4131)); 
//       g_Newrange.SetVerticalAlignment(_variant_t((long)-4160)); 
	   //
	    //填入的sn自动加1
	   UI64SNnumber++;
	}


g_Newbook.SaveAs(COleVariant(SaveExcelPath), covOptional,
            covOptional, covOptional,
            covOptional, covOptional, (long)0, covOptional, covOptional, covOptional,
            covOptional, covOptional);

//    //释放对象(相当重要!)   
//    g_book.ReleaseDispatch();
//    g_books.ReleaseDispatch();               
//	g_range.ReleaseDispatch();	
//	g_sheet.ReleaseDispatch();
//
//
//    //退出程序   
//    g_app.Quit();
//    //m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错   
//    g_app.ReleaseDispatch();
	g_Newbooks.Close();
	g_Newapp.Quit();
g_Newrange.ReleaseDispatch(); 
g_Newsheet.ReleaseDispatch(); 
g_Newsheets.ReleaseDispatch(); 
g_Newbook.ReleaseDispatch(); 
g_Newbooks.ReleaseDispatch(); 
g_Newapp.ReleaseDispatch(); 

  return 0;
}


void CExcelmadetoolDlg::Onaddr() 
{
     	   
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 
	CFileDialog dlg(true,"配置文件",NULL,0, "表格文件(.xls)|*.xls|表格文件(.xlsx)|*.xlsx");
	                                       
    //打开文件
    if(IDOK==dlg.DoModal())
        strADDRPath =dlg.GetPathName();
    //获取所有的工作簿
	   if(!g_app.CreateDispatch("Excel.Application"))
    {
     
        AfxMessageBox("无法启动Excel服务器");
        return;
    }
  //  g_books = g_app.GetWorkbooks();   
    //用来锁定对应的工作簿           
     g_books.AttachDispatch(g_app.GetWorkbooks(),true);  
	  g_book.AttachDispatch(g_books.Add(_variant_t(strADDRPath)),true);
	 
/*
    g_book = g_books.Open( strADDRPath,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional);
		  */
		
	//得到Worksheets,工作表
    g_sheets.AttachDispatch(g_book.GetWorksheets(),true);
    g_sheet=g_sheets.GetItem(COleVariant((short)1));
	//获得使用的区域
	g_range.AttachDispatch(g_sheet.GetUsedRange(),true);
	//获取使用的行数
	int usedrowNum=0;
    g_range.AttachDispatch(g_range.GetRows(),true);
	usedrowNum=g_range.GetCount();	
	impliedSNAllLine=usedrowNum;

	//给控件设立建表默认行

	CString CTempSNLine;
    CTempSNLine.Format(_T("%d"),impliedSNAllLine);
	pBoxEnd-> SetWindowText(CTempSNLine);

	//获取使用的列数
	int usedrowCol=0;
    g_range.AttachDispatch(g_range.GetColumns(),true);
	usedrowCol=g_range.GetCount();
	//获取工作表的名字
	CString sheetName=g_sheet.GetName();
	//展现文档
	//g_app.SetVisible(true);
	//释放
	g_books.Close();
	g_app.Quit();
	g_range.ReleaseDispatch(); 
    g_sheet.ReleaseDispatch(); 
    g_sheets.ReleaseDispatch(); 
    g_book.ReleaseDispatch(); 
    g_books.ReleaseDispatch(); 
    g_app.ReleaseDispatch();
}

void CExcelmadetoolDlg::GetEditworth() 
{
     

    //取值
    CString strStart;
	CString strEnd;

    pBoxStart-> GetWindowText(strStart);
	pBoxEnd-> GetWindowText(strEnd);

//	int nGetInt = atoi( LPCTSTR(strEnd) );

   StrtoInt( &strStart, &startLine) ;
   StrtoInt( &strEnd, &EndLine) ;
 
}

void CExcelmadetoolDlg::StrtoInt(CString * const putStr, int * const putInt) 
{
     

//	const char * pchar=(LPSTR)(LPCSTR)(*putStr);

   *putInt = atoi(*putStr);

}


void CExcelmadetoolDlg::GetSNAllworth() 
{
     
	COleVariant vResult;
	COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
    if( FAILED( CoInitialize(NULL) ) )
	{
     
    AfxMessageBox("初始化COM支持库失败!");
	}
		//没有添加提示,工作簿创建
 

//	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 
	CFileDialog dlg(true,"配置文件",NULL,0, "表格文件(.xls)|*.xls|表格文件(.xlsx)|*.xlsx");
	                                       
    //打开文件
    if(IDOK==dlg.DoModal())
        strADDRPath =dlg.GetPathName();
    //获取所有的工作簿
    g_books = g_app.GetWorkbooks();   
    //用来锁定对应的工作簿           
     g_books.AttachDispatch(g_app.GetWorkbooks(),true);   
	 
    g_book = g_books.Open( strADDRPath,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional,
          covOptional,covOptional,covOptional,covOptional);
	//得到Worksheets,工作表
    g_sheets.AttachDispatch(g_book.GetWorksheets(),true);
    g_sheet=g_sheets.GetItem(COleVariant((short)1));
	//获得使用的区域
	g_range.AttachDispatch(g_sheet.GetUsedRange(),true);
	//获取使用的行数
	int usedrowNum=0;
    g_range.AttachDispatch(g_range.GetRows(),true);
	usedrowNum=g_range.GetCount();	
	//获取使用的列数
	int usedrowCol=0;
    g_range.AttachDispatch(g_range.GetColumns(),true);
	usedrowCol=g_range.GetCount();
	//获取第2行第一列的值

	
	g_range.AttachDispatch(g_sheet.GetCells());
    g_range.AttachDispatch(g_range.GetItem(COleVariant((long)2), COleVariant((long)1)).pdispVal);//行与列
    vResult = g_range.GetValue2();
	//获取工作表的名字
	CString sheetName=g_sheet.GetName();
	//展现文档
	//g_app.SetVisible(true);
	//释放
		
	g_books.Close();
	g_app.Quit();
	g_range.ReleaseDispatch(); 
    g_sheet.ReleaseDispatch(); 
    g_sheets.ReleaseDispatch(); 
    g_book.ReleaseDispatch(); 
    g_books.ReleaseDispatch(); 
    g_app.ReleaseDispatch();
}

long CExcelmadetoolDlg::chToLong(const char *ch,int len)
{
     
 
  long sum=0;
 unsigned __int64 aa=LONG_MAX;
  for(int i=len-1;i>=0;i--)
  {
     
	  long mm=long(ch[i]);
      long nn=mm - 48;
     sum+=(mm - 48) * pow(10,len-1-i);
	
  }
  return sum;

}

你可能感兴趣的:(MFC知识系统)