Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/WordApplication.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

516 lines
13 KiB
C++

// WordAutomation.cpp: implementation of the CWordApplication class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "WordApplication.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWordApplication::CWordApplication()
{
}
CWordApplication::~CWordApplication()
{
// if(wordApplication.m_lpDispatch != NULL)
// Quit();
}
BOOL CWordApplication::InitWordApplication(BOOL visible)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE);
if (!wordApplication.CreateDispatch(_T("Word.Application")))
{
AfxMessageBox(_T("不能执行Microsoft Word 8.0!"));
return FALSE;
}
else
{
if (visible == TRUE)
wordApplication.SetVisible(TRUE);
wordDocuments = wordApplication.GetDocuments();
}
return TRUE;
}
BOOL CWordApplication::SaveAndQuit(LPCTSTR fileName)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE);
activeDocument.SaveAs(COleVariant(fileName), vtOptional, vtOptional, vtOptional,
vtTrue, vtOptional, vtFalse, vtOptional, vtTrue, vtFalse, vtFalse);
// activeDocument.Close(vtFalse,vtOptional,vtOptional);
// wordApplication.Quit(vtFalse, vtTrue, vtFalse);
return TRUE;
}
BOOL CWordApplication::CreateAndOpenDocument(LPCTSTR fileName)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE);
activeDocument = wordDocuments.Add(vtOptional,vtOptional);
activeDocument.SaveAs(COleVariant(fileName), vtOptional, vtOptional, vtOptional,
vtTrue, vtOptional, vtFalse, vtOptional, vtTrue, vtFalse, vtFalse);
return TRUE;
}
void CWordApplication::CreateDocument()
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE);
activeDocument = wordDocuments.Add(vtOptional,vtOptional);
}
BOOL CWordApplication::OpenDiskDocument(LPCTSTR fileName)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE);
activeDocument.AttachDispatch(wordDocuments.Open(COleVariant(fileName),
vtFalse, // conversion
vtFalse, // Not read only
vtTrue, // Add to recent documents
vtOptional, // passwordDoc
vtOptional, // passwordTemp
vtFalse, // Revert
vtOptional, // WritepasswordDoc
vtOptional, // WritepasswordTemp
vtOptional) // Format
);
return TRUE;
}
void CWordApplication::InsertEmptyLines(int numLines)
{
Selection wSelection = wordApplication.GetSelection();
for (int iCount = 1; iCount <= numLines; iCount++)
wSelection.TypeParagraph();
}
void CWordApplication::FillRow6(_Table pTable, int Row, CString Text1,
CString Text2, CString Text3, CString Text4,CString Text5,CString Text6)
{
Cell oCell;
Range oRange;
Cells pCells;
oCell = pTable.Cell(Row,1);
//pCells.Add(oCell);
pCells.Merge();
//oRange = oCell.GetRange();
//oRange.InsertAfter(Text1);
oCell = pTable.Cell(Row,2);
oRange = oCell.GetRange();
oRange.InsertAfter(Text2);
oCell = pTable.Cell(Row,3);
oRange = oCell.GetRange();
oRange.InsertAfter(Text3);
oCell = pTable.Cell(Row,4);
oRange = oCell.GetRange();
oRange.InsertAfter(Text4);
oCell = pTable.Cell(Row,5);
oRange = oCell.GetRange();
oRange.InsertAfter(Text5);
oCell = pTable.Cell(Row,6);
oRange = oCell.GetRange();
oRange.InsertAfter(Text6);
}
void CWordApplication::FillRow7(_Table pTable, int Row, CString Text1,
CString Text2, CString Text3, CString Text4,CString Text5,CString Text6,CString Text7)
{
Cell oCell,oCell1;
Range oRange;
Cells pCells;
oCell1 = pTable.Cell(Row,1);
// pCells.Item(1) = oCell;
//oRange = oCell.GetRange();
//_Font Font;
//Font = oRange.GetFont();
//Font.SetColorIndex(5);
//oRange.InsertAfter(Text1);
oCell = pTable.Cell(Row,2);
// pCells.Add(.Item(2) = oCell;
// oRange = oCell.GetRange();
// oRange.InsertAfter(Text2);
//pCells.Merge();
oCell1.Merge(oCell);
oCell = pTable.Cell(Row,1);
oRange = oCell.GetRange();
_Font Font;
Font = oRange.GetFont();
Font.SetColorIndex(5);
oRange.InsertAfter(Text1);
oCell = pTable.Cell(Row,2);
oRange = oCell.GetRange();
oRange.InsertAfter(Text3);
oCell = pTable.Cell(Row,3);
oRange = oCell.GetRange();
oRange.InsertAfter(Text4);
oCell = pTable.Cell(Row,4);
oRange = oCell.GetRange();
oRange.InsertAfter(Text5);
oCell = pTable.Cell(Row,5);
oRange = oCell.GetRange();
oRange.InsertAfter(Text6);
oCell = pTable.Cell(Row,6);
oRange = oCell.GetRange();
oRange.InsertAfter(Text7);
}
void CWordApplication::FillRow10(_Table pTable, int Row, CString Text1,
CString Text2, CString Text3, CString Text4,CString Text5,CString Text6,CString Text7,CString Text8,CString Text9,CString Text10)
{
Cell oCell;
Range oRange;
oCell = pTable.Cell(Row,1);
oRange = oCell.GetRange();
oRange.InsertAfter(Text1);
oCell = pTable.Cell(Row,2);
oRange = oCell.GetRange();
oRange.InsertAfter(Text2);
oCell = pTable.Cell(Row,3);
oRange = oCell.GetRange();
oRange.InsertAfter(Text3);
oCell = pTable.Cell(Row,4);
oRange = oCell.GetRange();
oRange.InsertAfter(Text4);
oCell = pTable.Cell(Row,5);
oRange = oCell.GetRange();
oRange.InsertAfter(Text5);
oCell = pTable.Cell(Row,6);
oRange = oCell.GetRange();
oRange.InsertAfter(Text6);
oCell = pTable.Cell(Row,7);
oRange = oCell.GetRange();
oRange.InsertAfter(Text7);
oCell = pTable.Cell(Row,8);
oRange = oCell.GetRange();
oRange.InsertAfter(Text8);
oCell = pTable.Cell(Row,9);
oRange = oCell.GetRange();
oRange.InsertAfter(Text9);
oCell = pTable.Cell(Row,10);
oRange = oCell.GetRange();
oRange.InsertAfter(Text10);
}
void CWordApplication::FillRow(_Table pTable, int Row, CString Text1,
CString Text2, CString Text3, CString Text4)
{
Cell oCell;
Range oRange;
oCell = pTable.Cell(Row,1);
oRange = oCell.GetRange();
oRange.InsertAfter(Text1);
oCell = pTable.Cell(Row,2);
oRange = oCell.GetRange();
oRange.InsertAfter(Text2);
oCell = pTable.Cell(Row,3);
oRange = oCell.GetRange();
oRange.InsertAfter(Text3);
oCell = pTable.Cell(Row,4);
oRange = oCell.GetRange();
oRange.InsertAfter(Text4);
}
void CWordApplication::AddText(CString text,CString sfont,float height, int align,float spacing,BOOL bold, BOOL italic,int color)
{
wordSelection = wordApplication.GetSelection();
_Font font = wordSelection.GetFont();
font.SetBold(bold);
font.SetItalic(italic);
font.SetSize(height);
font.SetName(sfont);
font.SetColorIndex(color);
wordParagraphs = wordSelection.GetParagraphs();
wordParagraphs.SetAlignment(align);
wordParagraphs.SetLineSpacing(spacing);
wordSelection.TypeText(text);
}
void CWordApplication::AddText2(CString text, float height, int align, BOOL bold, BOOL italic)
{
wordSelection = wordApplication.GetSelection();
_Font font = wordSelection.GetFont();
font.SetBold(bold);
font.SetItalic(italic);
font.SetSize(height);
font.SetColorIndex(11);
wordParagraphs = wordSelection.GetParagraphs();
wordParagraphs.SetAlignment(align);
wordSelection.TypeText(text);
}
Shape CWordApplication::AddLine(float x1, float y1, float x2, float y2)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
Shapes shapes = activeDocument.GetShapes();
Paragraphs paras = activeDocument.GetParagraphs();
Paragraph para = paras.GetLast();
Range rr = para.GetRange();
return shapes.AddLine(x1, y1, x2, y2, vtOptional);
}
Shape CWordApplication::AddOloObject(CString id, CString fName, BOOL linkToFile, BOOL displayAsIcon, CString icnFileName, int icnIndex, CString icnLabel, float left, float top, float width, float height)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE),
vtID(id),
vtfName(fName),
vticnFileName(icnFileName),
vticnIndex((short)icnIndex),
vticnLabel(icnLabel),
vtLeft((float)left),
vtTop((float) top),
vtWidth((float) width),
vtHeight((float) height);
Shapes shapes = activeDocument.GetShapes();
return shapes.AddOLEObject(
vtOptional, //vtID,
vtfName,
vtTrue,
vtFalse,
vtOptional, //vticnFileName,
vtOptional, //vticnIndex,
vtOptional, //vticnLabel,
vtLeft,
vtTop,
vtWidth,
vtHeight,
vtOptional
);
}
/////////////////
long CWordApplication::MoveDown_han(int Number)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE);
Selection wSelection = wordApplication.GetSelection();
for (int iCount = 1; iCount <= Number; iCount++)
return wSelection.MoveDown(vtFalse,vtFalse,vtFalse);
return 0;
}
//MoveUp(VARIANT* Unit, VARIANT* Count, VARIANT* Extend);
/* Window window = wordApp.activeDocument.GetActiveWindow();
window.GetActivePane();
window.SmallScroll(true,false,10.0,0.0);
*/
void CWordApplication::smallscroll(BOOL down , BOOL up, float toleft ,float toright)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtDown((short)down),
vtUp((short)up),
vttoleft((float)toleft),
vttoright((float)toright);
Window window = wordApplication.GetSelection();;
window.SmallScroll(vtDown,vtUp,vttoleft,vtOptional);
}
InlineShape CWordApplication::AddPicture_Han(CString fileName, BOOL linkToFile, BOOL saveWithDoc, BOOL Range)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE),
vtRange((short)Range);
InlineShapes inlineshapes = activeDocument.GetInlineShapes();
return inlineshapes.AddPicture(
fileName,
vtTrue,
vtFalse,
// vtRange,
vtOptional
);
}
Shape CWordApplication::AddPicture(CString fileName, BOOL linkToFile, BOOL saveWithDoc, float left, float top, float width, float height)
{
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
vtTrue((short)TRUE),
vtFalse((short)FALSE),
vtLeft((float)left),
vtTop((float) top),
vtWidth((float) width),
vtHeight((float) height);
Shapes shapes = activeDocument.GetShapes();
return shapes.AddPicture(
fileName,
vtTrue,
vtFalse,
vtLeft,
vtTop,
vtWidth,
vtHeight,
vtOptional
);
}
_Table CWordApplication::CreateTable(int rows, int columns, CWordArray &widths, int height)
{
if (widths.GetSize() < columns)
return NULL;
Selection wSelection = wordApplication.GetSelection();
Range oRange = wSelection.GetRange();
Tables oTables = activeDocument.GetTables();
_Table oTable = oTables.Add(oRange, rows, columns);
Columns oColumns;
Column oColumn;
// Set the width of each column
for (int col = 0; col < columns; col++)
{
oColumns = oTable.GetColumns();
oColumn = oColumns.Item(col+1);
float width = widths.GetAt(col);
oColumn.SetWidth(width, 0); // 0 = wdAdjustNone
}
return oTable;
}
void CWordApplication::GoToTheEnd()
{
// Go to the end of the document
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
wordSelection = wordApplication.GetSelection();
wordSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine
COleVariant((short)-1),vtOptional,vtOptional); // -1 = wdGoToLast
}
void CWordApplication::SetShading(_Table oTable, int row, int colorIndex, BOOL boldFlag)
{
Rows oRows = oTable.GetRows();
Row oRow = oRows.Item(row);
Cells oCells = oRow.GetCells();
Shading oShading = oCells.GetShading();
oShading.SetBackgroundPatternColorIndex(colorIndex); // 16 = wdGray25
Range oRange = oRow.GetRange();
oRange.SetBold(boldFlag);
}
void CWordApplication::SetItemText(_Table pTable, int nRow, int nCol, CString textStr)
{
Cell oCell;
Range oRange;
oCell = pTable.Cell(nRow, nCol);
oRange = oCell.GetRange();
oRange.InsertAfter(textStr);
}
////////////////////////////////////////////////////////////////////////////////////
//
// apptend by han
long CWordApplication::getEndKey_han()
{
/* COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
Selection wSelection = wordApplication.GetSelection();
// return wordSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine
// COleVariant((short)-1),vtOptional,vtOptional); // -1 = wdGoToLast
for (int i = 1 ; i<30; i++)
{
// wSelection.MoveUp(vtOptional,vtOptional,vtOptional);passed do not delete
}
*/
return 10;
}
//bool CExcelApplication::Create(BOOL bVisible)
//{
// application.CreateDispatch(_T("Excel.Application"));
// if(!application)
// return false;
// Workbooks oBooks = application.GetWorkbooks();
// COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// book = oBooks.Add(vOpt);
// //Worksheets oSheets = book.GetWorksheets();
// //sheet = oSheets.GetItem(COleVariant((short)1));
// if(bVisible)
// application.SetVisible(TRUE);
// return true;
//}