c#對Aspose.Word替換書籤內容的簡單封裝
輔助類1 json和datatable互轉:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.Serialization; //System.Web.Extensions.dll using System.Collections; using System.Data; namespace Utils { public static class JsonDataTableConvert { #region DataTable 轉換為Json 字串 /// <summary> /// DataTable 物件 轉換為Json 字串 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string ToJson(DataTable dt) { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大數值 ArrayList arrayList = new ArrayList(); foreach (DataRow dataRow in dt.Rows) { Dictionary<string, object> dictionary = new Dictionary<string, object>(); //例項化一個引數集合 foreach (DataColumn dataColumn in dt.Columns) { dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToStr()); } arrayList.Add(dictionary); //ArrayList集合中新增鍵值 } return javaScriptSerializer.Serialize(arrayList); //返回一個json字串 } #endregion #region Json 字串 轉換為 DataTable資料集合 /// <summary> /// Json 字串 轉換為 DataTable資料集合 /// </summary> /// <param name="json"></param> /// <returns></returns> public static DataTable ToDataTable(string json) { DataTable dataTable = new DataTable(); //例項化 DataTable result; try { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大數值 ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json); if (arrayList.Count > 0) { foreach (Dictionary<string, object> dictionary in arrayList) { if (dictionary.Keys.Count<string>() == 0) { result = dataTable; return result; } if (dataTable.Columns.Count == 0) { foreach (string current in dictionary.Keys) { var obj = dictionary[current]; dataTable.Columns.Add(current,typeof(string) /*obj == null ? typeof(string) : obj.GetType()*/);//全當做字串處理 } } DataRow dataRow = dataTable.NewRow(); foreach (string current in dictionary.Keys) { dataRow[current] = dictionary[current]; } dataTable.Rows.Add(dataRow); //迴圈新增行到DataTable中 } } } catch { } result = dataTable; return result; } #endregion #region 轉換為string字串型別 /// <summary> /// 轉換為string字串型別 /// </summary> /// <param name="s">獲取需要轉換的值</param> /// <param name="format">需要格式化的位數</param> /// <returns>返回一個新的字串</returns> public static string ToStr(this object s, string format = "") { string result = ""; try { if (format == "") { result = s.ToString(); } else { result = string.Format("{0:" + format + "}", s); } } catch { } return result; } #endregion } }
輔助類2 Excel表格資料和datatable互轉:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel; using System.IO; using System.Data; namespace Utils { //http://www.cnblogs.com/luxiaoxun/p/3374992.html public class ExcelDataTableConverter : IDisposable { private string fileName = null; //檔名 private IWorkbook workbook = null; private FileStream fs = null; private bool disposed; public ExcelDataTableConverter(string fileName) { this.fileName = fileName; disposed = false; } /// <summary> /// 將DataTable資料匯入到excel中 /// </summary> /// <param name="data">要匯入的資料</param> /// <param name="isColumnWritten">DataTable的列名是否要匯入</param> /// <param name="sheetName">要匯入的excel的sheet的名稱</param> /// <returns>匯入資料行數(包含列名那一行)</returns> public int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten) { int i = 0; int j = 0; int count = 0; ISheet sheet = null; fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); if (fileName.IndexOf(".xlsx") > 0) // 2007版本 workbook = new XSSFWorkbook(); else if (fileName.IndexOf(".xls") > 0) // 2003版本 workbook = new HSSFWorkbook(); try { if (workbook != null) { sheet = workbook.CreateSheet(sheetName); } else { return -1; } if (isColumnWritten == true) //寫入DataTable的列名 { IRow row = sheet.CreateRow(0); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName); } count = 1; } else { count = 0; } for (i = 0; i < data.Rows.Count; ++i) { IRow row = sheet.CreateRow(count); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); } ++count; } workbook.Write(fs); //寫入到excel return count; } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); return -1; } } /// <summary> /// 將excel中的資料匯入到DataTable中 /// </summary> /// <param name="sheetName">excel工作薄sheet的名稱</param> /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param> /// <returns>返回的DataTable</returns> public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn) { ISheet sheet = null; DataTable data = new DataTable(); int startRow = 0; try { fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); if (fileName.IndexOf(".xlsx") > 0) // 2007版本 workbook = new XSSFWorkbook(fs); else if (fileName.IndexOf(".xls") > 0) // 2003版本 workbook = new HSSFWorkbook(fs); if (sheetName != null) { sheet = workbook.GetSheet(sheetName); if (sheet == null) //如果沒有找到指定的sheetName對應的sheet,則嘗試獲取第一個sheet { sheet = workbook.GetSheetAt(0); } } else { sheet = workbook.GetSheetAt(0); } if (sheet != null) { IRow firstRow = sheet.GetRow(0); int cellCount = firstRow.LastCellNum; //一行最後一個cell的編號 即總的列數 if (isFirstRowColumn) { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { ICell cell = firstRow.GetCell(i); if (cell != null) { string cellValue = cell.StringCellValue; if (cellValue != null) { DataColumn column = new DataColumn(cellValue); data.Columns.Add(column); } } } startRow = sheet.FirstRowNum + 1; } else { startRow = sheet.FirstRowNum; } //最後一列的標號 int rowCount = sheet.LastRowNum; for (int i = startRow; i <= rowCount; ++i) { IRow row = sheet.GetRow(i); if (row == null) continue; //沒有資料的行預設是null DataRow dataRow = data.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { if (row.GetCell(j) != null) //同理,沒有資料的單元格都預設是null { //dataRow[j] = row.GetCell(j).ToString(); //19890603會顯示成MIDB(C2,7,6) dataRow[j] = row.GetCell(j).StringCellValue; } } data.Rows.Add(dataRow); } } return data; } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); return null; } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!this.disposed) { if (disposing) { if (fs != null) fs.Close(); } fs = null; disposed = true; } } } }
書籤內容替換封裝:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Aspose.Words; using System.Data; namespace Utils { public static class AsposeWordReplaceBookMarkContentApi { public static void BookMarkReplace(Document wordDoc,DocumentBuilder builder, string bookMark, string type, string value) { var bm = wordDoc.Range.Bookmarks[bookMark]; if (bm == null) { return; } if (type == "IMG") { bm.Text = ""; builder.MoveToBookmark(bookMark); var img = builder.InsertImage(@value); //img.Width = 300; //img.Height = 300;
<span style="color:#ff0000;">img.Width =ConvertUtil.PixelToPoint(124d); //單位轉換</span>
img.Height = ConvertUtil.PixelToPoint(134d);
img.HorizontalAlignment = Aspose.Words.Drawing.HorizontalAlignment.Center;
}
else if (type == "TABLE")
{
bm.Text = "";
builder.MoveToBookmark(bookMark);
DataTable dt = Utils.JsonDataTableConvert.ToDataTable(value);//json轉datatable
int rowCount = dt.Rows.Count;
int columnCount = dt.Columns.Count;
builder.MoveToBookmark(bookMark);
builder.StartTable();//開始畫Table
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center; // RowAlignment.Center;
string str = string.Empty;
builder.RowFormat.Height = 20;
//新增列頭
for (int i = 0; i < columnCount; i++)
{
builder.InsertCell();
//Table單元格邊框線樣式
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
//Table此單元格寬度
builder.CellFormat.Width = 600;
//此單元格中內容垂直對齊方式
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
//字型大小
builder.Font.Size = 10;
//是否加粗
builder.Bold = true;
//向此單元格中新增內容
builder.Write(dt.Columns[i].ColumnName);
}
builder.EndRow();
//新增每行資料
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
str = dt.Rows[i][j].ToString();
//http://www.cnblogs.com/geovindu/p/4106418.html
//http://www.cnblogs.com/wuhuacong/archive/2012/08/30/2662961.html
//插入Table單元格
builder.InsertCell();
//Table單元格邊框線樣式
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
//Table此單元格寬度 跟隨列頭寬度
//builder.CellFormat.Width = 500;
//此單元格中內容垂直對齊方式
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
//字型大小
builder.Font.Size = 10;
//是否加粗
builder.Bold = false;
//向此單元格中新增內容
builder.Write(str);
}
//Table行結束
builder.EndRow();
}
builder.EndTable();
}
else
{//其他文字,日期等文字
bm.Text = "";
builder.MoveToBookmark(bookMark);
bm.Text [email protected];
}
}
}
}
呼叫:
private void button2_Click(object sender, EventArgs e)
{
Aspose.Words.Document doc = new Aspose.Words.Document("TEMPLATE.DOCX");
Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);
//在書籤處插入表格
Utils.AsposeWordReplaceBookMarkContentApi.BookMarkReplace(doc, builder, "BK002", "TABLE", "[{'Name':'zhangsan','Sex':'Male'},{'Name':'wangwu','Sex':'Female'}]");
//在書籤處插入圖片
Utils.AsposeWordReplaceBookMarkContentApi.BookMarkReplace(doc, builder, "BK001", "IMG", "1.PNG");
//在書籤處插入文字
Utils.AsposeWordReplaceBookMarkContentApi.BookMarkReplace(doc, builder, "BK003", "TEXT", " 測試文字啊啊涉及到法律框架阿斯蘭開發按時交電費卡拉斯幾發,阿斯頓減肥拉斯加付款阿卡麗交電費卡拉斯發的,看到誰放假啦設計費看,開始搭建費綠卡是否看見快樂健康了阿斯頓發順豐空間看拉丁方.");
string saveDocFile = "1.DOCX";
doc.Save(saveDocFile);
if (MessageBox.Show("儲存成功,是否開啟檔案?", "", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start(saveDocFile);
}
}
效果:
相關推薦
c#對Aspose.Word替換書籤內容的簡單封裝
輔助類1 json和datatable互轉: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.S
c#呼叫Aspose.Word元件操作word 插入文字/圖片/表格 書籤替換套打
由於NPOI暫時沒找到書籤內容替換功能,所以換用Apose.Word元件. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; us
使用Jacob自動替換書籤內容
package ceshi; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.jacob.activeX.ActiveXComponent
c# 用Aspose.word讀寫word表格中某個單元格的用法
一、Aspose.word改寫word表格中某個單元格的值 用Aspose.word來讀寫word文件方便快捷,比c#自帶的讀寫word文件的類庫好用很多,網上很多都是迴圈給單元格賦值,這裡我給出改寫或直接給某個單元格賦值的方法: 1、引用(Aspose.Words.dl
利用C++11實現執行緒task的簡單封裝
#include <functional> #include <thread> #include <type_traits> /*Compile only if 'F' is callable. F maybe function, la
C# 復制Word(復制全部內容、部分內容、頁眉頁腳)
images 來講 打開 object cto wpar -o main 技術 本篇示例將介紹C# 復制Word文檔的方法。根據不同的需要,我們將復制Word文檔分三種情況來講述,具體包括以下幾點: 復制整個Word文檔 復制文檔中的部分內容 復制頁眉或者頁腳 工具使用
aspose.word使用簡單方法 加入特殊符號-https://www.cnblogs.com/louby/p/6456021.html
部落格園 首頁 新隨筆 聯絡 管理 訂閱 隨筆- 190 文章- 0 評論- 10 aspose.word 使用簡單方法 aspose.word使用簡單方法 概念介紹 使用aspose生
.net 使用 Aspose.Words 進行 Word替換操作
之前在工作中,需要實現Word列印功能,並且插入圖片。當時採取的方式則是使用書籤進行操作。首先在word內插入書籤,完成後,存為模板。程式載入該模板,找到書籤,並在指定位置寫入文字即可。 後期維護過程中,發現模板經常需要變更,但是書籤在word中不方便檢視,使用者在編輯wo
ASP.NET C#如何讀取word,寫入word,複製內容到另一個word文件,批量修改檔名
首先要新增COM引用 Microsoft word 11.0 Object Library. 然後新增.NET引用 Microsoft.Office.Interop.Word.dll 下載Aspose.Words引用 Aspose.Words.dll using S
使用poi動態替換word指定文字內容
這兩天專案需要用到動態生成word文件,於是從網上查了各種資料。一種是通過poi來替換word指定內容的。具體java程式碼請百度。我這裡直說我遇到的問題以及解決方案。 問題:指定文字被解析成了多個XWFPRun物件,比如${userName}被解析成了“${” + "us
word vba批量替換檔案內容並批量修改檔名
最近在工作中遇到某一資料夾下的許多檔案,名字和內容有大量需要替換,一個個手工替換很麻煩,於是修改了一段程式碼: Sub 批量更改word要素編號及檔名() '此程式碼為指定資料夾中所有選取的WORD檔案的進行格式設定 Dim MyDialog As FileDialog,
二:C#對象、集合、DataTable與Json內容互轉示例;
系列 clas rdquo etime private 什麽 讀書 people 過程 這個過程沒有什麽需要說的,擼個簡單一點的代碼說明下:先定義一個人員類,這個類裏面的屬性有string,int,list,枚舉,這幾個差不多夠了。 public class peop
用C#對ADO.NET資料庫完成簡單操作
資料庫訪問是程式中應用最普遍的部分。隨著C#和ADO.NET的引入,這種操作變得更簡單。這篇文章將示範四種最基礎的資料庫操作。 ● 讀取資料。其中包括多種資料型別:整型,字串,日期型。 ● 寫資料。如讀資料一樣,我們也需要寫入多種型別的資料。這可以通過SQL語句來完成。
C/C++11 正則表示式替換檔案內容
直接上程式碼,YFile只不過是對fstream的封裝 #include <iostream> #include <string> #include <regex> using namespace std; string R
運用c# 對Word進行操作總結(一)建立Word文件
在醫療管理系統中為儲存患者的體檢和治療記錄,方便以後的醫生或其他人檢視。當把資料儲存到資料庫中,需要新建很多的欄位,而且操作很繁瑣,於是想到網頁的資訊建立到一個word文字中,在顯示的時,可以線上開啟word,也可以把word轉換成html標籤顯示。 這樣使用
C# Aspose.Word 操作word文件【二】
上一篇我們介紹了用書籤的方式來填充word中資料,今天介紹第二種方法操作word! 依舊是先自己建好word模板,然後這裡就不需要插入書籤了。 1、建立模板 能看到紅色標示的區域依舊用到了書籤,沒事
python 對txt中每行內容進行批量替換
f = open('./val.txt') lines = f.readlines() #整行讀取 f.close() for line in lines: rs = line.rstrip('\n') #去除原來每行後面的換行符,但有可能是\r或\r\n newname=rs.replace
Aspose.Word之通過模板(書籤)匯出word文件,並刪除多餘的單元格
public partial class WordExport_KJYJJRHLTHTS : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e)
對c++11下新增字元編碼格式轉換函式的簡單封裝
c++11標準新增了一些字串編碼格式轉換的函式和類,方便開發者寫跨平臺程式碼。我對它們做了簡單的封裝並在VS2013測試通過。 #pragma once #include <cstdlib> #include <cassert> #include &
對設計模式的總結之簡單工廠與策略模式
mage 建立 不變 href catch nag 實現類 初步 cti 前言 面向對象編程追求的本質-提高擴展性、可維護性、靈活性和復用性。合理利用面向對象6個原則,能夠很好的達到要求。如何利用好就是至關重要的了,前人總結了23+個設計模式能夠讓初學者更容易