? ? 1.直接將Html轉(zhuǎn)成Word。MVC自帶FileResult很好用。Html中我們也可以嵌入自己的樣式。
? ? html:
<
div
id
="target"
>
<
style
>
table
{
border-collapse
:
collapse
;
border
:
1px solid black
;
}
td
{
border
:
1px royalblue solid
}
</
style
>
<
img
src
="../../Content/eman_sm.png"
alt
=""
/>
<
table
>
<
tr
>
<
td
>
姓名
</
td
>
<
td
>
成績(jī)
</
td
>
</
tr
>
<
tr
>
<
td
>
張山
</
td
>
<
td
>
80分
</
td
>
</
tr
>
<
tr
>
<
td
>
李四
</
td
>
<
td
>
90分
</
td
>
</
tr
>
</
table
>
</
div
>
<
div
style
="color: red"
></
div
>
<
a
id
="ea"
href
="#"
>
導(dǎo)出word
</
a
>
<
a
href
="@Url.Action("
ExportWords")"
>
ExportWords
</
a
>
<script>
$(
"#ea").click(
function
() {
var
html = $("#target"
).html();
window.open(
"/Home/ExportWord?html=" +
html);
})
</script>
get方法會(huì)受到url長(zhǎng)度的影響,可以換成隱藏的form提交。
<
form
id
="form1"
action
="/Home/ExportWord"
>
<
input
type
="hidden"
value
=""
name
="html"
id
="cc"
/>
<
input
type
="submit"
id
="st"
/>
</
form
>
<
div
id
="target"
>
<
style
>
table
{
border-collapse
:
collapse
;
border
:
1px solid black
;
}
td
{
border
:
1px royalblue solid
}
</
style
>
<
table
>
<
tr
>
<
td
>
姓名
</
td
>
<
td
>
成績(jī)
</
td
>
</
tr
>
<
tr
>
<
td
>
張山
</
td
>
<
td
>
80分
</
td
>
</
tr
>
<
tr
>
<
td
>
李四
</
td
>
<
td
>
90分
</
td
>
</
tr
>
</
table
>
</
div
>
<
div
style
="color: red"
></
div
>
<
a
id
="ea"
href
="#"
>
導(dǎo)出word
</
a
>
<
a
href
="@Url.Action("
ExportWords")"
>
ExportWords
</
a
>
<
script
>
$(
"
#ea
"
).click(
function
() {
var
html
=
$(
"
#target
"
).html();
$(
"
#cc
"
).val(html);
$(
"
#st
"
).click();
})
</
script
>
?
Action:
[ValidateInput(
false
)]
public
FileResult ExportWord(
string
html)
{
StringBuilder sb
=
new
StringBuilder();
sb.Append(
"
<!DOCTYPE html>
"
);
sb.Append(
"
<body>
"
);
sb.Append(html);
sb.Append(
"
</body>
"
);
var
byteArray =
System.Text.Encoding.Default.GetBytes(sb.ToString());
Response.ContentEncoding
= System.Text.Encoding.GetEncoding(
"
gb2312
"
);
return
File(byteArray,
"
application/ms-word
"
,
"
wordtest
"
+
"
.doc
"
);
}
這樣的問(wèn)題是導(dǎo)出的圖片是引用型的,路徑一變化就不會(huì)顯示了。優(yōu)點(diǎn)就是速度很快。
? 2.使用Microsoft.Office.Interop.Word 提供的方法創(chuàng)建一個(gè)word。
///
<summary>
///
創(chuàng)建一個(gè)word
///
</summary>
///
<returns></returns>
public
ActionResult ExportWords()
{
CreateAWord();
SetPageHeader(
"
測(cè)試創(chuàng)建一個(gè)Word文檔
"
);
InsertText(
"
這是一個(gè)測(cè)試文檔的內(nèi)容
"
,
14
, WdColor.wdColorGray10,
1
, WdParagraphAlignment.wdAlignParagraphLeft);
NewLine();
InsertPicture(
@"
C:\Users\Administrator\Desktop\duoceshi.png
"
);
InsertTable();
SaveWord(
@"
C:\Users\Administrator\Desktop\\test.doc
"
);
CloseDocument(
@"
C:\Users\Administrator\Desktop\\test.doc
"
);
return
null
;
}
///
<summary>
///
Word應(yīng)用對(duì)象
///
</summary>
private
Microsoft.Office.Interop.Word.Application _wordApplication;
///
<summary>
///
word 文件對(duì)象
///
</summary>
private
Microsoft.Office.Interop.Word.Document _wordDocument;
///
<summary>
///
創(chuàng)建文檔 如果報(bào)錯(cuò):類(lèi)型“Microsoft.Office.Interop.Word.ApplicationClass”未定義構(gòu)造函數(shù) ; 解決方法:在其中點(diǎn)開(kāi)“引用”文件夾,在"Microsoft.Office.Interop.Word" 上點(diǎn)擊鼠標(biāo)右鍵,選擇“屬性”,將屬性中的“嵌入互操作類(lèi)型”的值改為“false”即可
///
</summary>
public
void
CreateAWord()
{
//
實(shí)例化word應(yīng)用對(duì)象
this
._wordApplication =
new
Microsoft.Office.Interop.Word.ApplicationClass();
Object myNothing
=
System.Reflection.Missing.Value;
this
._wordDocument =
this
._wordApplication.Documents.Add(
ref
myNothing,
ref
myNothing,
ref
myNothing,
ref
myNothing);
}
///
<summary>
///
添加頁(yè)眉
///
</summary>
///
<param name="pPageHeader"></param>
public
void
SetPageHeader(
string
pPageHeader)
{
//
添加頁(yè)眉
this
._wordApplication.ActiveWindow.View.Type =
Microsoft.Office.Interop.Word.WdViewType.wdOutlineView;
this
._wordApplication.ActiveWindow.View.SeekView =
Microsoft.Office.Interop.Word.WdSeekView.wdSeekPrimaryHeader;
this
._wordApplication.ActiveWindow.ActivePane.Selection.InsertAfter(pPageHeader);
//
設(shè)置中間對(duì)齊
this
._wordApplication.Selection.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
//
跳出頁(yè)眉設(shè)置
this
._wordApplication.ActiveWindow.View.SeekView =
Microsoft.Office.Interop.Word.WdSeekView.wdSeekMainDocument;
}
///
<summary>
///
插入文字
///
</summary>
///
<param name="pText">
文本信息
</param>
///
<param name="pFontSize">
字體大小
</param>
///
<param name="pFontColor">
字體顏色
</param>
///
<param name="pFontBold">
字體粗體
</param>
///
<param name="ptextAlignment">
方向
</param>
public
void
InsertText(
string
pText,
int
pFontSize, Microsoft.Office.Interop.Word.WdColor pFontColor,
int
pFontBold, Microsoft.Office.Interop.Word.WdParagraphAlignment ptextAlignment)
{
//
設(shè)置字體樣式以及方向
this
._wordApplication.Application.Selection.Font.Size =
pFontSize;
this
._wordApplication.Application.Selection.Font.Bold =
pFontBold;
this
._wordApplication.Application.Selection.Font.Color =
pFontColor;
this
._wordApplication.Application.Selection.ParagraphFormat.Alignment =
ptextAlignment;
this
._wordApplication.Application.Selection.TypeText(pText);
}
///
<summary>
///
換行
///
</summary>
public
void
NewLine()
{
//
換行
this
._wordApplication.Application.Selection.TypeParagraph();
}
///
<summary>
///
插入一個(gè)圖片
///
</summary>
///
<param name="pPictureFileName"></param>
public
void
InsertPicture(
string
pPictureFileName)
{
object
myNothing =
System.Reflection.Missing.Value;
//
圖片居中顯示
this
._wordApplication.Selection.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
this
._wordApplication.Application.Selection.InlineShapes.AddPicture(pPictureFileName,
ref
myNothing,
ref
myNothing,
ref
myNothing);
}
///
<summary>
///
插入表格
///
</summary>
public
void
InsertTable()
{
object
myNothing =
System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Table table1
= _wordDocument.Tables.Add(_wordApplication.Selection.Range,
4
,
3
,
ref
myNothing,
ref
myNothing);
_wordDocument.Tables[
1
].Cell(
1
,
1
).Range.Text =
"
產(chǎn)品\n項(xiàng)目
"
;
_wordDocument.Tables[
1
].Cell(
1
,
2
).Range.Text =
"
電腦
"
;
_wordDocument.Tables[
1
].Cell(
1
,
3
).Range.Text =
"
手機(jī)
"
;
_wordDocument.Tables[
1
].Cell(
2
,
1
).Range.Text =
"
重量(kg)
"
;
_wordDocument.Tables[
1
].Cell(
3
,
1
).Range.Text =
"
價(jià)格(元)
"
;
_wordDocument.Tables[
1
].Cell(
4
,
1
).Range.Text =
"
共同信息
"
;
_wordDocument.Tables[
1
].Cell(
4
,
2
).Range.Text =
"
信息A
"
;
_wordDocument.Tables[
1
].Cell(
4
,
3
).Range.Text =
"
信息B
"
;
table1.Select();
table1.Rows.Alignment
= Microsoft.Office.Interop.Word.WdRowAlignment.wdAlignRowCenter;
//
整個(gè)表格居中
_wordApplication.Selection.Cells.VerticalAlignment
=
Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
_wordApplication.Selection.ParagraphFormat.Alignment
=
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
_wordApplication.Selection.Cells.HeightRule
=
Microsoft.Office.Interop.Word.WdRowHeightRule.wdRowHeightExactly;
_wordApplication.Selection.Cells.Height
=
40
;
table1.Rows[
2
].Height =
20
;
table1.Rows[
3
].Height =
20
;
table1.Rows[
4
].Height =
20
;
table1.Range.ParagraphFormat.Alignment
=
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
_wordApplication.Selection.Cells.Width
=
150
;
table1.Columns[
1
].Width =
75
;
table1.Cell(
1
,
1
).Range.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
table1.Cell(
1
,
1
).Range.Paragraphs[
2
].Format.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
_wordApplication.Selection.Cells.VerticalAlignment
=
Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
_wordApplication.Selection.ParagraphFormat.Alignment
=
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
_wordApplication.Selection.Cells.HeightRule
=
Microsoft.Office.Interop.Word.WdRowHeightRule.wdRowHeightExactly;
_wordApplication.Selection.Cells.Height
=
40
;
table1.Rows[
2
].Height =
20
; table1.Rows[
3
].Height =
20
;
table1.Rows[
4
].Height =
20
;
table1.Range.ParagraphFormat.Alignment
=
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
_wordApplication.Selection.Cells.Width
=
150
;
table1.Columns[
1
].Width =
75
;
table1.Cell(
1
,
1
).Range.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
table1.Cell(
1
,
1
).Range.Paragraphs[
2
].Format.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
//
表頭斜線(xiàn)
table1.Cell(
1
,
1
).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].Visible =
true
;
table1.Cell(
1
,
1
).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].Color =
Microsoft.Office.Interop.Word.WdColor.wdColorGreen;
table1.Cell(
1
,
1
).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].LineWidth =
Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt;
//
表格邊框
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].Visible =
true
;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].Color
=
Microsoft.Office.Interop.Word.WdColor.wdColorGreen;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].LineWidth
=
Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].Visible
=
true
;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].Color
=
Microsoft.Office.Interop.Word.WdColor.wdColorGreen;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].LineWidth
=
Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].Visible
=
true
;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].Color
=
Microsoft.Office.Interop.Word.WdColor.wdColorGreen;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineWidth
=
Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineStyle
=
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDoubleWavy;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].Visible
=
true
;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].Color
=
Microsoft.Office.Interop.Word.WdColor.wdColorGreen;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineWidth
=
Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineStyle
=
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDoubleWavy;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].Visible
=
true
;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].Color
=
Microsoft.Office.Interop.Word.WdColor.wdColorGreen;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineWidth
=
Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineStyle
=
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].Visible
=
true
;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].Color
=
Microsoft.Office.Interop.Word.WdColor.wdColorGreen;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineWidth
=
Microsoft.Office.Interop.Word.WdLineWidth.wdLineWidth050pt;
table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineStyle
=
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble;
//
合并單元格
//
_wordDocument.Tables[1].Cell(4, 2).Merge(table1.Cell(4, 3));
}
[DllImport(
"
shell32.dll
"
)]
public
static
extern
int
ShellExecute(IntPtr hwnd, String lpszOp, String lpszFile, String lpszParams, String lpszDir,
int
FsShowCmd);
///
<summary>
///
關(guān)閉文檔
///
</summary>
public
void
CloseDocument(
string
fileName)
{
object
myNothing =
System.Reflection.Missing.Value;
//
關(guān)閉文檔
object
saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges; _wordDocument.Close(
ref
myNothing,
ref
myNothing,
ref
myNothing);
_wordApplication.Application.Quit(
ref
saveOption,
ref
myNothing,
ref
myNothing); _wordDocument =
null
; _wordApplication =
null
;
//
ShellExecute(IntPtr.Zero, "open", fileName, "", "", 3);
}
///
<summary>
///
保存文件
///
</summary>
///
<param name="pFileName">
文件名
</param>
public
void
SaveWord(
string
pFileName)
{
object
myNothing =
System.Reflection.Missing.Value;
object
myFileName =
pFileName;
object
myWordFormatDocument =
Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument;
object
myLockd =
false
;
object
myPassword =
""
;
object
myAddto =
true
;
try
{
this
._wordDocument.SaveAs(
ref
myFileName,
ref
myWordFormatDocument,
ref
myLockd,
ref
myPassword,
ref
myAddto,
ref
myPassword,
ref
myLockd,
ref
myLockd,
ref
myLockd,
ref
myLockd,
ref
myNothing,
ref
myNothing,
ref
myNothing,
ref
myNothing,
ref
myNothing,
ref
myNothing);
}
catch
(Exception exception)
{
throw
new
Exception(
"
保存word文檔失敗!
"
);
}
}
?圖片倒是保存住了,可配置的地方很多,速度有些慢,代碼量頗多。
?3.如果要導(dǎo)出excel 還是用NPOI最好。? http://www.cnblogs.com/lwme/archive/2011/11/18/npoi_excel_import_export.html
? 調(diào)用該博主ExcelRender中的方法,返回File。 不然網(wǎng)上的其他辦法都很有問(wèn)題,要么打不開(kāi),要么服務(wù)器沒(méi)裝office就不行了。
public
FileResult ExportExcel()
{
DataTable table
=
new
DataTable();
table.Columns.Add(
"
aa
"
,
typeof
(
string
));
table.Columns.Add(
"
bb
"
,
typeof
(
string
));
table.Columns.Add(
"
cc
"
,
typeof
(
string
));
for
(
int
i =
0
; i <
10
; i++
)
{
string
a =
DateTime.Now.Ticks.ToString();
Thread.Sleep(
1
);
string
b =
DateTime.Now.Ticks.ToString();
Thread.Sleep(
1
);
string
c =
DateTime.Now.Ticks.ToString();
Thread.Sleep(
1
);
table.Rows.Add(a, b, c);
}
var
ms=
ExcelRender.RenderToExcel(table);
return
File(ms,
"
application/vnd.ms-excel
"
,
"
考試成績(jī).xls
"
);
}
?4. Excel導(dǎo)入。
? file就是一個(gè)HttpPostedFileBase 對(duì)象。即上傳的excel文件。用ExcelRender 轉(zhuǎn)換為table 再進(jìn)行插入數(shù)據(jù)庫(kù)的操作。
byte
[] filebBytes =
new
byte
[file.ContentLength];
file.InputStream.Read(filebBytes,
0
, file.ContentLength);
var
table = ExcelRender.RenderFromExcel(
new
MemoryStream(filebBytes),
0
,
0
);
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

